1

これは安全なものですか?または、いくつかの 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');
}
4

2 に答える 2

1

$command[0]英数字 (および場合によってはアンダースコアとハイフン) のみが含まれていることを確認すると、ある程度安全になる可能性があります。

次のようなものが仕事をするかもしれません:

if (!ctype_alnum($command[0])) {
    // Hacking attempt!
    exit;
}

ただし、ユーザーの入力に基づいてファイルを含めることは、依然として悪い考えです。より良いアイデアは、URI をコントローラーにマップするルックアップ テーブルを使用し、autoload を使用して関連ファイルを含めることです。このようにして、ユーザー入力とインクルードの間に強力な分離があります。

于 2012-05-05T17:47:25.427 に答える
0

コードは、ユーザーが提供する任意の文字列を PHP のinclude; これは悪く、https://www.owasp.org/index.php/Server-Side_Includes_ (SSI)_Injectionの教科書的な例です

これを必要とする解決しようとしている問題は何ですか?

于 2012-05-05T17:34:02.280 に答える