.htaccessを介して悪用される可能性のあるセキュリティ上の弱点がないことを確認するために、ApacheがSetHanlder
やAddHandler
などのディレクティブを介して使用できるすべての可能なハンドラーを確認するにはどうすればよいですか。
Mod_infoの出力を確認するか、confファイルをgrepすることでいくつかを見つけることができます(これは、この質問への答えを見つけようとしたときに見つけたアプローチでした)が、利用可能なハンドラーがないという意味ではありません。そのようにリストされていません。 Apacheのすべてのソースコードとロードされているすべてのモジュールをダウンロードして検索し、それらが何を登録しているかを確認できると思いますが、もっと良い方法はありますか?
簡単な修正は、.htaccessでAddHandlerとSetHandlerを許可しないことですが、これには欠点があります。たとえば、Drupalには、SetHandlerディレクティブの有効なユースケースがあります。これは、誰かがPHPスクリプトを実行しないようにするために、多層防御の一部として使用するためです。どういうわけか、ファイルアップローダーを介してそれらをサイトにアップロードすることができます。
これが私が言及しているもののいくつかの例です:
AddHandler server-parsed .shtml
SetHandler server-info
AddHandler application/x-httpd-php5 .php
興味のある方は、sites/default/files /.htaccessのDrupalのユースケースをご覧ください。
# Set the catch-all handler to prevent scripts from being executed.
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006
<Files *>
# Override the handler again if we're run later in the evaluation list.
SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003
</Files>
2015年7月30日編集:これは完全な答えではありませんが、誰かに役立つ場合に備えて、 http://httpd.Apache.org/docs/2.4/handler)の上部にいくつかのハンドラーがリストされているのを見つけました。 html また、カスタムハンドラーはActionディレクティブで作成できることもお読みください( http://httpd.Apache.org/docs/2.4/mod/mod_actions.html#action を参照)。
2015年9月1日編集:httpdプロセスのメモリをダンプし、そこでハンドラー名を見つける方法があるかどうか疑問に思います。 gcoreを使用してこれを試しましたが、成功しませんでした(ただし、これまで使用したことがなく、実行時に警告が表示されたため、何か問題があるかどうかはわかりません)。
できません、ごめんなさい。 Apacheモジュールガイド に関する私の声明によると:
したがって、サーバー自体は、特定の要求の処理を担当するモジュールを認識しているとは想定せず、各モジュールに特定の要求に関心があるかどうかを尋ねます。次に、認証/承認モジュールのように、リクエストの提供を穏やかに拒否するか、サービスの提供を受け入れるか、リクエストの提供を拒否するかは、各モジュールの責任です。
設計に従って、すべて要求時に処理されるため、モジュールをトラバースしたり、これを理解したりすることはできません。ハンドラー名については、各モジュールのソースコードを読む必要があります。
最善の策は、リクエストに対して現在設定されているハンドラーを受け入れられたハンドラー名のセットと照合するモジュールを自分で作成し、リストにない場合はデフォルトに変更することです。
ハンドラーがリクエストをマップできる既存のアクション、スクリプトなどのリストを返すための実装済みの方法はないと確信しています。
このような情報を返すことができるApacheモジュールを作成することは可能かもしれませんが、そこで何が可能かを理解するには、Apacheコードを少し調べてみる必要があります。