یه چند وقتی هست که مدام درگیر کارهای امنیتی، خصوصا برای PHP هستم. این دفعه میخوام یه مشکل کوچیک رو توضیح بدم. خیلی ها معمولا اینکار رو انجام میدن (دست کم کدی که من امروز دیدم اینطوری بود! ) :
<?php if (!check_current_user_has_privilege_to_this_page()){ header("Location: some_other_page.php"); } // echo "This is very important data!";
این کد، بررسی میکنه یه تابع دسترسی به این صفحه رو داره، اگر نه پاسش میده به یه صفحه دیگه، در غیر اینصورت (یعنی اگه کاربر دسترسی داشت) اطلاعاتی رو که باید نشون بده نشون میده، یا کارهایی که باید انجام بشه رو انجام میده. اطلاعات و یا کارهایی که ما نمیخوایم کاربر عادی بدون رد کردن شرطهای امنیتی مثل رمز ببینه.
ولی اینجا یه مشکل هست :) خیلی هم بزرگه. header() اطلاعات رو میفرسته به طرف کاربر و در طرف کاربر عمل جابجایی (redirect ) انجام میشه. حالا اگه با یه برنامه که درکی از Redirect و اصولا پروتکل HTTP نداره این صفحه باز بشه؟؟ یا بدتر، اول این افزونه فایرفاکس رو نصب کنید بعد صفحه رو باز کنید، البته قبلش آدرس صفحه رو توی تنظیمات افزون اضافه کنید، اینجوری:
میبینید که صفحه کاملا باز میشه.برای مثال آدرس
http://cyberrabbits.net/non/bigbang/headercheck.php
رو چک کنید که این مشکل رو داره، کدش هم اینه :
<?php /* * this is an example for redirect problem :) * */ if (true) header("Location: http://google.com"); echo "This is very important data, you can not see this!(or you can :) )";
قاعدتا فسمت echo هیچوقت نباید نمایش داده بشه، ولی اون افزونه نصب و فعال باشه دیده میشه :) این یعنی که این روش یه چیزی کم داره.
خوب چاره چیه؟؟
خیلی ساده :
<?php if (!check_current_user_has_privilege_to_this_page()){ header("Location: some_other_page.php"); die(); //Very sweet :) little , beautiful function!! } // echo "This is very important data!";