私はこれを行うための最良の方法は何であるかを尋ねるつもりでしたが、それが必要であるかどうかさえ尋ねるべきであると決めました。私はそれがJSP
開発で行われるのを見たことがありませんが、それはで一般的な慣行のようPHP
です。これの背後にある理由は何ですか、そして私がこれから保護しない場合、私は他に何を考慮に入れるべきですか?
8 に答える
これが他の同様の言語よりも PHP で一般的である理由は、PHP の歴史に関係しています。PHP の初期のバージョンでは、デフォルトで "register_globals" 設定がオンになっていました (実際、初期のバージョンでは設定さえされていなかった可能性があります)。Register_globals は、クエリ文字列に従ってグローバル変数を定義するように PHP に指示します。したがって、そのようなスクリプトを次のようにクエリした場合:
http://site.com/script.php?hello=world&foo=bar
...スクリプトは、変数 $hello を値「world」で、変数 $foo を値「bar」で自動的に定義します。
このようなスクリプトの場合、主要な変数の名前を知っていれば、クエリ文字列でそれらの変数を指定することでスクリプトを悪用することができました。ソリューション?コア スクリプトでいくつかのマジック ストリングを定義し、すべての補助スクリプトがマジック ストリングをチェックし、存在しない場合は救済します。
ありがたいことに、もはや register_variables を使用する人はほとんどいませんが、多くのスクリプトは依然として非常に貧弱に記述されており、コンテキスト外で呼び出された場合に損害を与えるばかげた仮定を行っています。
個人的には、Symfony フレームワークを使用してすべてを回避しています。これにより、(少なくともデフォルト設定では) コントローラーとテンプレートが Web ルートから完全に除外されます。唯一のエントリーポイントはフロントコントローラーです。
外部の Web ルートからすべてを含めても、何も直接ロードできないため、問題にはなりません。
これは、機密性の高いインクルードがWebサーバーに直接送信されないようにするためです。これは確かに包括的なセキュリティ対策ではありませんが、特定の設定に役立つ可能性があります。
ただし、ユーザーが自分のスクリプトからファイルを含めることができる場合は、まったく役に立ちません。
深刻なセキュリティ対策としてではなく、サイトの内部に関する情報、さらには内部ファイルの名前を漏らしたくないという理由だけで、404ページを発行しています。
ただし、ファイルに関数が含まれているだけの場合は、チェックを省略しても実際に害はありません。
これは、phpのセキュリティ機能だけでなく、MVCベースのPHPサイトがいくつ機能するかということでもあります。たとえば、SugarCRMでモジュールファイルを直接呼び出すと、コントローラー、ビュー、モデルが以前にロードされておらず、db config / connection情報もないため、ページのロードが失敗します。したがって、すべての依存関係がロードされていることを確認してください。ユーザーは既知のエントリポイント、つまりindex.phpを強制的に通過します
他のいくつかの回答ですでに述べたように、これを行う必要はありません。ファイルがWebサーバーによって提供されることが想定されていない場合は、そのファイルをWebフォルダー内に残さないでください。インクルードは、Webルートの外部のディレクトリに配置する必要があります。
それとは別に、ページが存在しないことをユーザーに通知する適切な方法は、以下を使用してステータス404を発行することです。
header("HTTP/1.0 404 Not Found");
exit;
これを行わないと、人間以外(検索エンジンなど)が通常のページと非ページを区別するのが困難になります。
.Net MVC システムで、Apache Rewrites、.htaccess ファイル、または IIS を使用している場合は web.config ファイルを使用して PHP 用に複製できるアプローチを見つけました。
MVC パターンでは、ユーザーが aspx ファイルに直接アクセスする必要がないため、これらは提供されず、代わりに 404 が送信されます。たとえば、含まれるファイル「inc.php」の命名規則がある場合、*.inc.php リクエストを特定のフォルダーの 404 にリダイレクトできます。Apache Rewrite では、ルールの最後に R=404 を指定すると、その HTTP ステータスが返されます。あなたのクライアントに。
これらの例のいくつかが役立つ場合があります: Apache 書き換えの例
Google ツールバーを実行しているサイトを編集している場合、内部の php ファイルが検索され、検索結果に表示されるため、これは非常に重要です。せいぜいこれはユーザーにとって厄介な経験を生み出すだけですが、ずさんなプログラマーの場合、データベース接続情報が明らかになる可能性があります。