这包括安全吗?或者是否可以使用一些RFI / LFI或它叫什么?
$request_uri = explode('/', $_SERVER['REQUEST_URI']);
$script_name = explode('/', $_SERVER['SCRIPT_NAME']);
for ($i = 0; $i < sizeof($script_name); $i++) {
if ($request_uri[$i] == $script_name[$i])
{
unset($request_uri[$i]);
}
}
$command = array_values($request_uri);
if (file_exists('controllers/' . $command[0] . '.php')) {
include 'controllers/' . $command[0] . '.php';
}
更新
if (isset($_GET['p'])) {
$pages = array('home', 'login', 'register');
$page = filter_var($_GET['p'], FILTER_SANITIZE_URL);
if (in_array($page, $pages) && file_exists($page . '.php')) {
include ($page . '.php');
} else {
include ('404.php');
}
}
else {
include ('home.php');
}
答案 0 :(得分:1)
好吧,如果你确保$command[0]
只包含字母数字字符(可能还有下划线和连字符),那么可以有点安全。
以下内容可能会起作用:
if (!ctype_alnum($command[0])) {
// Hacking attempt!
exit;
}
但是根据用户输入包含文件仍然是一个坏主意。更好的想法是使用将URI映射到控制器的查找表,并使用自动加载来包含相关文件。这样,用户输入和包含就会有很强的分离。
答案 1 :(得分:0)
您的代码将用户提供的任意字符串提供给PHP的include
;这很糟糕,几乎是https://www.owasp.org/index.php/Server-Side_Includes_(SSI)_Injection
你想解决什么问题需要这个?