我在 Apache Tomcat 服务器前面运行一个带有 Apache http 服务器的 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 方法,那么我会得到这个好看的响应:OPTIONS
<http-method>OPTIONS</http-method>
80/tcp open http
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
如果我尝试在实际上位于 tomcat 前面的 Apache Web 服务器中禁用该 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
被禁用
答案1
脚本正在发送OPTIONS
请求并报告结果。这将报告服务器软件支持。您的安全配置不会改变 Tomcat 理解的方法;它只是添加了一个安全约束,即仅允许满足条件的用户使用那些方法auth-constraint
,在本例中条件不包含任何用户。因此 Tomcat 是诚实的:它做理解PUT
,DELETE
即使没有人被允许使用它们。
如果您需要进一步确认,可以添加--script-args http-methods.retest
到命令中。这将指示脚本使用每个发现的方法发送请求并报告响应的状态代码。但要小心:这将要导致发送类似的请求DELETE /
,这可能会造成危害。