4

このコードを使用すると、どのような影響がありますか?

<?php
if(file_exists("pages/" . $_GET["page"] . ".php")){
    include("pages/" . $_GET["page"] . ".php");
    } else{
        include("pages/home.php");
        }
?>

拡張子「.php」がないと読み込めないようにしているので、かなり安全に使えると思います。使用する場合:

website.com/index.php?page=../index 

URL では、無限ループが作成されます。私の知る限り、外部 URL を読み込むことはできません。

例:

website.com/index.php?page=anothersite.com/virus

しかし、よくわかりません。何か提案はありますか?それともこれ使って大丈夫?

4

5 に答える 5

2

../../null バイトと組み合わせたパターンを使用すると、パスがその囲みを「エスケープ」する可能性があります。

"../../../etc/passwd\0.php"

それについてあなたができることは2つあります:

  1. 受け入れる可能性のある値のホワイト リストを使用します。

  2. 最初にパスをサニタイズします。

    $path = preg_replace('/[^a-z]/', '');
    // now use $path as you would
    
于 2013-05-27T05:36:31.417 に答える
0

まず第一に、URL パラメータに従ってページをインクルードするのは安全ではありません。これはユーザーが簡単に台無しにする可能性があるため、避けたほうがよいでしょう。

次に、外部 URL を含めたくない場合は、http: //www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-include に従って php.ini を構成する必要がある場合があります。

まだ php.ini の設定に慣れていない場合は、最初に $_GET['page'] の "http://"、"https://" 文字列を削除してください。これは良い動作です。.htaccessファイルを使用して、存在しないページ要求を home.php にリダイレクトするには、mod_rewrite がサーバー上にあることも確認する必要があります。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ home.php [NC,L] 
于 2013-05-27T02:58:56.970 に答える
0

あなたが指摘したように、これを行うと、無限のルーピーハットが発生し、phpがクラッシュする可能性があります。

PHP のクラッシュは、多くの悪い結果をもたらす可能性があります。たとえば、削除されない一時ファイルをアップロードできます。これは、最終的には大規模なリークや攻撃につながる可能性があります。

于 2013-05-27T03:03:47.300 に答える
0

ローカル ファイル インクルージョンとして知られる深刻な脆弱性が発生します。GET パラメータはフィルタリングされません。jack が述べたようにフィルタリングするか、少し単純なphp realpath()関数を使用するだけです。

于 2013-05-27T13:19:06.063 に答える