ApacheTomcatサーバーの前にApachehttpサーバーを備えたWebサーバーを実行しています。
私の目標:WebサーバーでhttpメソッドDELETE
とPUT
を無効にします。
OWASP( https://www.owasp.org/index.php/Test_HTTP_Methods_(OTG-CONFIG-006) )によると、これは次のコマンドでテストする必要があります。
nmap -p 80 --script http-methods www.example.com
私のサーバーでは、次の応答があります。
PORT STATE SERVICE
80/tcp open http
| http-methods:
| Supported Methods: GET HEAD POST PUT DELETE OPTIONS
|_ Potentially risky methods: PUT DELETE
http://www.techstacks.com/howto/disable-http-methods-in-Tomcat.html によると、web.xmlのこの行でPUTとDELETEを無効にできます
<security-constraint>
<web-resource-collection>
<web-resource-name>restricted methods</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
<auth-constraint />
</security-constraint>
これを追加しても、応答はSupported Methods: GET HEAD POST PUT DELETE OPTIONS
のままです。
web.xmlに<http-method>OPTIONS</http-method>
を追加してhttp-methodOPTIONS
をさらに無効にすると、次のような見栄えの良い応答が得られます。
80/tcp open http
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
実際にTomcatの前にあるApacheWebサーバーでそのhttpメソッドを無効にしようとすると、同じことが起こります。参照: http://www.techstacks.com/howto/disable-http-methods-in-Apache.html
欲しいもの:
PUT
とDELETE
を無効にしますOPTIONS
を無効にしないでくださいnmap -p 80 --script http-methods www.example.com
は、DELETE
とPUT
が無効になっていることを応答する必要がありますスクリプトはOPTIONS
リクエストを送信し、結果を報告しています。これは、サーバーソフトウェアがサポートするメソッドを報告します。セキュリティ構成は、Tomcatが理解する方法を変更していません。これらのメソッドは、auth-constraint
条件を満たすユーザー(この場合はユーザーを含まない)にのみ許可されるというセキュリティ制約が追加されています。したがって、Tomcatは真実です。doesPUT
とDELETE
を理解します。たとえ、誰も使用を許可されていなくても。
さらに確認が必要な場合は、コマンドに--script-args http-methods.retest
を追加できます。これにより、検出された各メソッドでリクエストを送信し、レスポンスのステータスコードを報告するようにスクリプトに指示します。ただし、注意してください。これはwillDELETE /
のようなリクエストを送信することになり、有害な場合があります。