安全包括php

时间:2012-05-05 16:39:20

标签: php security

这包括安全吗?或者是否可以使用一些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');
}

2 个答案:

答案 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

的教科书示例

你想解决什么问题需要这个?