我正在使用:
<?php
$file = $_GET['page']; //ie: http://localhost/?page=index
include "php/{$file}.php";
?>
但是我需要知道在调用$file
时调整include
变量最安全的方法是什么。
我在考虑类似的事情:
//-replace '.' with ''
//-replace '/' with ''
//-replace '\' with ''
但我确信有更好的方法,所以我请求你的帮助。 我需要它非常安全。
谢谢。
答案 0 :(得分:2)
如果您需要非常安全,即使在修剪后也不要包含它。相反,在您获得的变量和您需要包含的文件之间使用类似于类似的关联:
<?php
$file = $_GET['page'];
$allowed_pages = array('index', 'profile', 'legal', 'about');
if (in_array($file, $allowed_pages)) {
include "php/" . $file . ".php");
} else {
die("The page " . $file ." does not exist");
}
?>
这样,您永远不会获得任何意外的包含。
答案 1 :(得分:1)
我想无论你做什么,都不能信任用户数据。
如果你的可用文件数量有限,你应该制作一组数据并允许它们。
$allowedFiles = array('index','somewhere','elswhere');
if (!in_array($file,$allowedFile))
exit ('File Not found');
else
include("php/{$file}.php");
编辑:
另一种方法是扫描您的目录并删除您不想要的文件和目录。
$filesInDir = scandir("./php");
$allowedFiles = array_diff(array(".","..","protected.php"),$filesInDir);
if (!in_array($file.".php",$allowedFile))
exit ('File Not found');
else
include("php/{$file}.php");