0
我通過一個名爲index.php的文件重定向所有頁面請求,該文件查看訪問者請求的URL並查看是否存在要匹配的模板文件。PHP包含基於pathinfo的文件 - 安全性問題?
例如,http://www.website.com/contact實際上將路由到index.php腳本,並應檢查文件/var/html/template/contact.tpl是否存在幷包含它,如果是的話。
我關心的是關於安全和空字符,額外的點和斜線等是否有一種過濾器需要將下面的代碼或者是使用PATHINFO和目錄前綴就夠了嗎?顯然,我不希望任何人能夠惡意地將文件包含在指定的模板目錄之外。
<?php
define ('TEMPLATES', '/var/html/templates');
$page = pathinfo ($_SERVER['REQUEST_URI'], PATHINFO_FILENAME);
if (file_exists (TEMPLATES . '/' . $page . '.tpl')) {
include (TEMPLATES . '/' . $page . '.tpl');
} else {
header ('HTTP/1.0 404 Not Found');
echo 'Sorry page not found';
}
?>
對每個請求都進行全局透明處理?這不是一個好的選擇。 – Gumbo
你是對的 - 它不是超級快,但更多的是展現一個觀點。我的答案的第一句話將是我推薦的解決方案。如果在生產中使用glob,那麼'GLOB_NOSORT'標誌將是提高性能的好主意。 – calcinai
感謝您的回答,在過去,我已經使用了一種網頁「白名單」中的建議,但最好我不想在每次創建一個新網頁/模板的時間來更新白名單 – MrCarrot