1

セキュリティ上の理由と、許可されていない人に静的ファイルを公開したくないため、すべてのリクエストが PHP に渡されます。

$_SERVER["REQUEST_URI"]変数を介して誰かが悪意のあるコードを挿入する可能性が心配です。サブフォルダーの参照を削除しようとしましたが、安全かどうかはまだわかりません。

ニンクス

rewrite ^ /index.php last;

index.php

<?php
    $uri = $_SERVER["REQUEST_URI"];
    $uri = strlen ($uri) > 1 ? substr ($uri, 1) : "index.html";
    $uri = preg_replace ("/\/?\.\./", "", $uri, -1); // Remove sub-folders

    if (file_exists (getcwd () . "/" . $uri)) {
        $extension = substr ($uri, strrpos ($uri, "."));

        switch ($extension) {
            case ".css": $mime = "text/css"; break;
            case ".js": $mime = "application/javascript"; break;
            default:
                $info = finfo_open (FILEINFO_MIME_TYPE);

                $mime = finfo_file ($info, $uri);

                finfo_close ($info);
            break;
        }

        if ($mime === false)
            header ("Content-Type: text/html; charset=utf-8"); // Default
        else
            header ("Content-type: " . $mime);

        require ($uri);
    }
    else {
        // Error, blah blah blah
    }
?>
4

1 に答える 1

1

はい、あなたは LFI (Local File Inclusion) 攻撃を懸念しています。それが可能だ。現在、 をチェックしているとき。/ および \ 文字を URI に含めることで、ディレクトリ トラバーサル攻撃を防ぐことができます。それはかなり良いです。ご想像のとおり、次のようなファイルを含めると:

index.php?file=something.php および index.php には $_GET['file']; が含まれます。

攻撃者は、次のようにサーバー内のすべてのファイルを読み取る可能性があります: index.php?file=../../../../../../../../../../etc/パスワード

ですから、対策を講じる必要があります。LFI および RFI (リモート ファイル インクルージョン) 攻撃を防止する方法について Imperva からの非常に優れた記事を以下に示します: https://www.imperva.com/lg/lgw.asp?pid=463

登録不要: http://www.slideshare.net/Imperva/how-to-prevent-rfi-and-lfi-attacks

また、こちら: http://25yearsofprogramming.com/blog/2011/20110124.htm

于 2013-01-07T19:13:09.170 に答える