-1

私のアプローチが安全で、ファイル参照を実装する良い方法であるかどうか疑問に思っています。私はあなたが使用できることを理解しています:

include $_SERVER['DOCUMENT_ROOT'] . "includes/config.php"

PHP スクリプト内のファイルを参照します。ただし、次のような邸宅で同じ呼び出しを使用すると、セキュリティ上の脆弱性が生じると想定しました。

<img src="<?php echo $_SERVER['DOCUMENT_ROOT'] ?>/images/image.jpg" />

ベース ファイル ディレクトリはフロントエンド ユーザーに表示されるためです。これを修正するために、config.php ファイル (すべてのページで実行される) に次のコマンドを追加しました。

chdir($_SERVER['DOCUMENT_ROOT']);

このようにして、ルートから参照する必要があることを常に知っており、フロントエンド ユーザーは私のファイル構造を見ることができません。これは良い方法ですか?

前もって感謝します!

4

1 に答える 1

1

次のような邸宅で同じ呼び出しを使用すると、セキュリティ上の脆弱性になると思いました。

<img src="<?php echo $_SERVER['DOCUMENT_ROOT'] ?>/images/image.jpg" />

これはセキュリティ上の脆弱性(*)ではなく、単に機能しません。<img src>クライアントがアクセスする外部 URL アドレスです。DOCUMENT_ROOTサーバー スクリプトで使用される内部ファイル アドレスです。

ドキュメント ルートは、外部ルート URL ( /) に対応するファイル システム パスです。したがって、ドキュメント ルートが/home/me/www-dataである場合、上記のブラウザに表示される画像は になりsrc="/home/me/www-data/images/image.jpg"、ブラウザはサーバーに URL を要求し、サーバーはドキュメント ルート内/home/me/www-data/images/image.jpgでそのファイルを探します。おそらくそのファイルパスは存在しないため、サーバーは a で応答し、壊れた画像が表示されます。/home/me/www-data/home/me/www-data/images/image.jpg404

(*: ええと...ドキュメント ルート ディレクトリに<in のような HTML 特殊文字が含まれている場合を除きますが、これはありそうもありません。それでも、htmlspecialchars()HTML インジェクションの問題を回避するために、HTML ページにドロップする変数値は常にあります。)

chdir($_SERVER['DOCUMENT_ROOT']);

これは何もしません。Web サーバーは、ドキュメント ルートに関連する画像を単独で提供します。画像要求に対して PHP スクリプトが実行されることはありません。

于 2013-07-13T12:52:43.000 に答える