PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تابع ob_start در php امنه؟



vahid13713
September 5th, 2016, 10:42
سلام
من برای استفاده از تابع header به مشکل خوردم و تنها راه حلی که جواب داد استفاده از
تابع ob_start بود . حالا از نظر امنیتی این تابع چون جلو اجرای خط به خط php رو میگیره و از بافل استفاده میکنه امنتره یا اینکه نه مشکل امنیتی داره؟ من بنظرم امنتر میاد درسته؟

با تشکر از همکاریتون

iHSG
September 5th, 2016, 11:00
سلام
به نظر من اگه یکم بیشتر تو کد هاتون فکر کنید احتمالاً راه منطقی تری برای ارسال header ها قبل از خروجی html به کاربر پیدا میکنید که نیازی به ob_start هم نباشه اما در شرایط خاصی که واقعاً راه حداقل آسونی برای این کار وجود نداره ob_start برای همین ساخته شده.فکر نکنم مشکل امنیتی هم داشته باشه چون حتی تو PHP 7 هم این تابع وجود داره.

vahid13713
September 5th, 2016, 12:35
یک کم بیشتر تو نت تحقیق کردم یه جایی یه نکته رو دیدم که پیش بینی هام رو تایید کرد..استفاده از این تابع باعث افزایش امنیته البته برای کسایی که حواس پرتن...نوشته رو میزارم بقیه استفاده کنن


ه خاطره تلخ هم در مورد رعایت یه مسئله امنیتی بگم براتون, من تو یه پروژه ای برای Session صفحه مدیر از headerاستفاده کرده بودم که اگه سشن درست نبود به صفحه خروج ریدایرکت بشه! کاری که همه می کنند,
کد PHP:

if(!isset($_SESSION['secret']))
{
header(“location: logout.php”);

……….



(تو پست بعدی یه سری مسائل امنیتی در مورد ورود امنت تر و استفاده همزمان از Session و کوکی هامی نویسم)
خوب طبق بالا اگه کسی مستقیم وارد صفحه مدیر میشد ولی لاگین نکرده بود صفحه منتقل میشد! بعد دیدم یکی از دوستام ایمیل زده می خنده می گه من بدون لاگین وارد صفحه میشم!!
بعد که بررسی کردم دیدم فایل کانفیگ با Notepad ویندوز ویرایش شده بود و غیر استاندارد ذخیره شده بود و به اصطلاح دارای BOM شده بود یعنی خروجی HTML یه کارکتر خالی میفرستاد و این یعنی ارسال header !! برای همین header دوم ارسال نمیشد و هر کسی میتونست تو ادمین واسه خودش دور بزنه راه حلش هم ساده هست استفاده از تابع exit(); !
وقتی ما از تابع headerاستفاده می کنیم یعنی با ادامه کد کاری نداریم پس برنامه رو exit میکنیم که اگه سهوا هیدر ارسال نشد لا اقل دسترس هم نداشته باشند! مثل :
کد PHP:

if(!isset($_SESSION['secret']))
{
header(“location: logout.php”);

exit();

T.Toosi
September 5th, 2016, 13:15
سلام، کلا با تابع هایی که دارای callback هستند میتوان سو استفاده هایی کرد، با اینکه ob_start هم callback میگیرد اما مشکل تابع های callback دا را برای ساخت بک دور ندارد اما دیده شده بعضی میزبانی ها کل تابع هایی که callback میگیرند را بسته اند که ob_start جز این دسته حساب میشود.

webnagroup
September 6th, 2016, 00:46
دوست عزیز نحوه استفاده از تابع مهمه وگرنه اگر این تابع امن نبد که در ورژن های بعدی php کلا وجود نداشت.