我準備在$ _GET數組的基礎上建立一個請求路由系統。包含文件時的安全考慮
例如,對於URL ?r=login
我會使用包括myfiles/".$_GET['r'].".php";
這將自動指向myfiles的/ login.php中
我知道我需要消毒獲取輸入,但我擔心,因爲它是可能會惡意重定向包含。任何人都可以建議如何防止這一點?在調用它之前,我還可以檢查實際存在的文件嗎?
我有我自己的一些想法,我只想知道我沒有錯過任何考慮。
我準備在$ _GET數組的基礎上建立一個請求路由系統。包含文件時的安全考慮
例如,對於URL ?r=login
我會使用包括myfiles/".$_GET['r'].".php";
這將自動指向myfiles的/ login.php中
我知道我需要消毒獲取輸入,但我擔心,因爲它是可能會惡意重定向包含。任何人都可以建議如何防止這一點?在調用它之前,我還可以檢查實際存在的文件嗎?
我有我自己的一些想法,我只想知道我沒有錯過任何考慮。
不包含通過url指定的文件總是一個好主意。如果您仍然想這樣做,使用switch
陳述或任何array
過濾的東西,包括你只需要什麼:
例1:
$page = $_GET[...];
switch($page){
case 'login': include 'login_page.php'; break;
// and so on
default: die("bye bad guy !");
}
例2:
$page = $_GET[...];
$pages = array('page1.php', 'page2.php', 'page3.php');
if(in_array($page, $pages))
{
include($page);
{
else
{
die("bye bad guy !");
}
我建議你看看這些相關的安全措施:
如果可以的話,使用白名單。如果不能,那麼:
如果我設置包括與之前把絕對路徑變量,會阻止重定向站點? (我正在考慮將這些包含在Web根目錄之上,而不是公開的視圖)。 – YsoL8 2010-08-14 14:17:58