2010-01-06 71 views
0

IM做一個小網站指數GET變種包括

,而是有header.php文件,與neccesarry信息(功能,DBConnection的,HTML頭)一footer.php的,包括每一次我想頁全都在index.php中。但是,我必須將頁面添加到白名單以及所有這些。我只是希望能夠將它放在頁面中,然後通過index.php訪問它?page = test

如何在不必製作大白名單的情況下包含頁面?如何使用preg_match和checcking該頁面變量只包含a-z。沒有邪惡的小點。如果它只包含字母a-z> include? 或可能使用水珠和掃描頁/,將它們添加到陣列,所以我不每次都

請告訴我你的想法和意見

<html> 
<head> 
<title>SindACC</title> 
</head> 
<body> 

<?php include($page) ?> 

</body> 
</html> 

回答

1

如果你不想使用白名單,對$page變量使用basename,以消除任何父目錄攻擊,則包括文件在pages/目錄中。只要你不把不應該在目錄中看到的文件,你沒事。

+0

+1 - 避免使用「..」類型漏洞的好處。 – 2010-01-07 12:14:47

1

只要把在所有的網頁都index.php文件編輯文件夾(說「/頁」)。然後,在執行include之前,請檢查文件夾中是否存在該文件。

+0

關鍵部分是「檢查文件是否在頁面目錄中」。否則,你的頁面中將會有一個巨大的安全代碼。 – 2010-01-06 20:55:42

1

我肯定會做的正則表達式檢查,甚至只是平了santize(剝離任何不字母數字爲例),那麼你可以做一個file_exists()檢查和如果成功,那麼包括

0

有頁面目錄,清除頁面路徑外的無效字符,並僅包含頁面目錄中的文件。我認爲你有正確的想法。

0

像其他人說的那樣,確保您清理變量。這是一種可能的方式,但像20點的方式,你可以做到這一點孤單:

function sanitizeAlpha($string) 
{ 
    if (preg_match_all('/([A-Z]|[a-z]/', $string, $matches) > 0) 
    { 
     return implode($matches[0]); 
    } else { 
     die('Invalid Page Name'); 
    } 
}