5
在一個PHP程序中,header()重定向可以指向結束程序流程,還是有值,例如,使用die()跟蹤它們是否安全?用戶是否有可能以某種方式利用該腳本來放棄重定向?如果用戶被重定向爲沒有足夠的訪問權限,並且以下代碼僅適用於未被重定向的用戶,則此問題至關重要。可以重新定向header()來結束程序流嗎?
在一個PHP程序中,header()重定向可以指向結束程序流程,還是有值,例如,使用die()跟蹤它們是否安全?用戶是否有可能以某種方式利用該腳本來放棄重定向?如果用戶被重定向爲沒有足夠的訪問權限,並且以下代碼僅適用於未被重定向的用戶,則此問題至關重要。可以重新定向header()來結束程序流嗎?
不,標頭不結束程序執行。你必須退出或死亡才能結束它。你可以自己用這樣的嘗試這樣的:/tmp/test
<?php
file_put_contents('/tmp/test', '1');
header('Location: http://www.emilvikstrom.se/');
file_put_contents('/tmp/test', '2');
?>
檢查的內容,你會發現這是2
。
我也試過這個腳本:
<?php
header('Location: http://www.emilvikstrom.se/');
echo "Test\n";
?>
通過telnet到手動發送HTTP請求,這個結果一起:
HTTP/1.1 302 Found
Server: nginx/0.7.67
Date: Tue, 05 Jul 2011 07:27:14 GMT
Content-Type: text/html
Connection: close
X-Powered-By: PHP/5.3.3-7+squeeze1
Location: http://www.emilvikstrom.se/
Vary: Accept-Encoding
Content-Length: 5
Test
正如你看到的,這是後迴盪一切位置標題仍然被髮送到瀏覽器。事實上,如果您要發送更多頭文件,或者回顯的內容非常重要,PHP無法在header
調用之後知道。
你應該使用exit()或者死在你的頭後 –
要得到一個目前已經設置了頭的列表,請參見['headers_list()'](http://php.net/manual/en/function.headers -list.php) – hakre