منبع اصلی نوشتار زیر در این لینک قرار دارد

HTTP Redirect

یه چند وقتی هست که مدام درگیر کارهای امنیتی، خصوصا برای 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 نداره این صفحه باز بشه؟؟ یا بدتر، اول این افزونه فایرفاکس رو نصب کنید بعد صفحه رو باز کنید، البته قبلش آدرس صفحه رو توی تنظیمات افزون اضافه کنید، اینجوری:

تنظیم افزونه NoRedirect برای دور زدن http redirect در یک صفحه خاص

تنظیم افزونه NoRedirect برای دور زدن http redirect در یک صفحه خاص


میبینید که صفحه کاملا باز میشه.برای مثال آدرس


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!";



برچسب ها : , , ,