PHP には、allow_url_fopen という構成オプションがあり、デフォルトで有効になっています。これにより、さまざまな種類のリソースを指定し、それらをローカル ファイルのように扱うことができます。たとえば、次の URL を読み取ることで、ページのコンテンツ (HTML) を取得できます:
<?php $contents = file_get_contents('http://example.org/'); ?>
第 5 章で説明したように、汚染されたデータを使用して include および require のファイルを指定すると、重大な脆弱性が発生する可能性があります。実際、私はこの脆弱性は、攻撃者に任意のコードの実行を可能にするため、PHP アプリケーションで最も危険な脆弱性の 1 つであると考えています。
深刻度はわずかに低くなりますが、汚染されたデータが標準のファイル システム関数で使用される場合、同様の脆弱性が発生する可能性があります。 ) の動作を変更して、リモート リソースの内容を取得します。次のようなリクエストを考えてみましょう:
http://www.php.cn/… mple.org%2Fxss.html
これにより、$content の値が汚染される状況が発生します。この値は間接的に取得されるため、この事実は無視される可能性があります。これが、多層防御の原則がファイル システムをリモート データ ソースとして扱い、$content の値を入力として扱うため、フィルタリング メカニズムが状況を好転させる可能性があります。
$content 値が汚染されているため 、クロスサイト スクリプティングの脆弱性や SQL インジェクションの脆弱性など、さまざまなセキュリティ上の脆弱性が発生する可能性があります。たとえば、クロスサイト スクリプティングの脆弱性の例を次に示します。 解決策は、汚染されたデータを含むファイル名を決して指定しないことです。入力をフィルタリングすることだけを主張し、データがファイル名を指す前にフィルタリングされていることを確認してください。 $content 内のデータが完全に完璧であるという保証はありませんが、これにより、読み取っているファイルが、攻撃者が指定したファイルではなく、読み取ろうとしたファイルとまったく同じであるという合理的な保証が得られます。このプロセスのセキュリティを強化するには、$content を入力として扱い、使用前にフィルタリングする必要もあります。
<?php $contents = file_get_contents($_GET['filename']); ?>
上記のプロセスは、さまざまな攻撃を防ぐ強力な方法を提供するため、実際のプログラミングでの使用をお勧めします。
上記は、PHP セキュリティ - リモート ファイルのリスクの内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) にご注意ください。