我正在一個現有的網站上尋找安全問題。可以肯定地說,在瀏覽器被重定向之後PHP腳本會中止,或者狡猾的用戶可能會強制腳本繼續。假設用戶當前登錄,「is_logged_in」返回1或0.假設此函數沒有漏洞。代碼如下:重定向後PHP腳本可以繼續嗎?
<?
$fp = fopen("./debug.txt", "a");
fwrite("BEFORE LOGIN CHECK\n");
if(!is_logged_in()) {
fwrite("Not authed \n");
header("Location: $url", TRUE, 302);
}
fwrite("Passed auth check \n");
/* Code to do some logged in functionality here */
?>
使用普通瀏覽器登錄的用戶,我得到
BEFORE LOGIN CHECK
Passed auth check
在用戶未登錄我得到
BEFORE LOGIN CHECK
Not authed
是否有可能保持腳本打開(並忽略重定向),使用原始請求以便我得到
BEFORE LOGIN CHECK
Not authed
Passed auth check
本質上進入if塊,獲取重定向頭,忽略它,並讓腳本繼續執行。
如果不是我會做更正此問題:
if(!is_logged_in()) {
fwrite("Not authed \n");
header("Location: $url", TRUE, 302);
die();
}
但我不知道這是連一個問題。
'header()'*設置標題*,它不以任何方式包含*停止當前腳本*。 – deceze 2013-03-19 14:37:57
debug.txt怎麼沒有進入「通過驗證檢查」。該腳本確實似乎正在終止。 – user2072710 2013-03-19 14:38:55
因爲該命令無效? 'fwrite'需要*兩個參數* ...! – deceze 2013-03-19 14:40:00