特定のファイルタイプ(拡張子による)および/またはファイル名への(パブリック)アクセスを予防的に無効にすることは良い考えですか?
たとえば、次のようなファイル名:
または、上記のファイル名と組み合わせた次のファイル拡張子:php
、log
、html
、htm
、txt
、doc
、docx
、rtf
、場合によってはそれ以上、without any
ファイル拡張子。
そして、次のような特定のファイル拡張子へのアクセスを完全に拒否します:svn
、git
、sh
、bat
、cmd
、sql
、ini
、config
、conf
、bak
、backup
、およびold
。
そうするのは良い考えですか?それらのファイルが(誤って)パブリックフォルダに移動されたときの情報漏えいを防ぐため。
特定のファイルタイプ(拡張子による)および/またはファイル名への(パブリック)アクセスを予防的に無効にすることは良い考えですか?
絶対に!実際、すべてのアクセスを拒否し、既知の適切な要求のみを許可する必要があります。これは、「デフォルトの拒否」または「ホワイトリスト」とも呼ばれます。
マーカス・ラナムは、 コンピュータセキュリティにおける6つの最も愚かな考え にいくつかの素晴らしい点を持っています。密接に関連していますが、最初の2つはあなたの質問に直接当てはまります。
1)デフォルトの許可-明示的に拒否されているいくつかのファイル名/拡張子などを除いてすべての要求が許可されるため、これは現在のアプローチです。すべてをブロックし、既知の有効な要求のみを許可する方がはるかに簡単で安全です。利用可能なすべてのリンクをクロールする利用可能な多くのWebサイトスパイダーがあります。 URLのリストが作成されたら、それを調べて、エンドユーザーのみがアクセスする必要があるURLのリストを選択できます。これは、ウェブサイトが制限されたページを誤って宣伝していないことを確認する機会でもあります(つまり、管理者のみ)。
2)不良の列挙-「デフォルトの拒否」を実装する方がはるかに簡単で、正常なリクエストのみを許可してから、考えられるすべての不良リクエストのルールを設定できます。 WebサイトがPHPを実行している場合、Ruby、Java、ASPなどの要求をブロックするルールを管理する必要はありません。不必要な作業だけでなく、大きなリストを管理すると、特にタイプミスが発生しやすくなります。
プラスの副作用は、正常なリクエストのみがスタック全体を通過できるため、パフォーマンスが向上する可能性があることです。
私が実行しているWebサーバーでは、次のようなWebアプリ構成の詳細を含むあらゆる種類のサーバーログファイルや機密ファイルへのアクセスを拒否しています WordPressのwp-config.php
ファイル
ただし、Webサイトを実行している場合、他のいくつかのファイルタイプに加えて、PHP、HTML、CSSへのアクセスを拒否すると、Webサイトを適切に表示するためにブラウザーがこれらのファイルにアクセスする必要があるため、Webサイトが使用できなくなります。
さらに、ファイルの ファイルのアクセス許可を正しく設定する を調べて、適切なユーザーだけがファイルを表示、編集、および移動できるようにします。
最後に、ファイルタイプをブラックリストに登録するのではなく、ホワイトリストに登録することをお勧めします。これは、通常、エラーの余地が少なく、.htaccessファイルまたはサーバーブロックで多くのスペースを占有しないためです。
適切な言語とフレームワークを使用していると仮定すると、アクセス可能なURLは定義したルートのみです。特定のディレクトリにある静的で機密性の低いファイルを除いて、他のすべてはデフォルトで404になります。
機密性の高いものは、とにかくWebサーバーの手の届かないところにあり、アプリケーションがそうすることを選択した場合にのみ、アプリケーションによってプロキシされる必要があります。