近日,一个上线很久的项目,后台使用curl测试时发现了一个漏洞:不安全的HTTP方法,如下图所示:
一、HTTP方法
根据HTTP标准,HTTP请求可以使用多种方法,其如下所示:
HTTP1.0定义了三种请求方法:GET、POST和HEAD
HTTP1.1新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE和CONNECT
WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。
二、不安全的HTTP方法
众所周知,GET、POST是最为常见方法,而且大部分主流网站只支持这两种方法,因为它们已能满足功能需求。其中,GET方法主要用来获取服务器上的资源,而POST方法是用来向服务器特定URL的资源提交数据。而其它方法出于安全考虑被禁用,所以在实际应用中,九成以上的服务器都不会响应其它方法,并抛出404或405错误提示。以下列举几个HTTP方法的不安全性:
1、OPTIONS方法,将会造成服务器信息暴露,如中间件版本、支持的HTTP方法等。
2、PUT方法,由于PUT方法自身不带验证机制,利用PUT方法即可快捷简单地入侵服务器,上传Webshell或其他恶意文件,从而获取敏感数据或服务器权限。
3、DELETE方法,利用DELETE方法可以删除服务器上特定的资源文件,造成恶意攻击。
三、禁用不安全的HTTP方法
修改自己应用的web.xml文件,添加以下配置:
<!-- 禁用不安全的HTTP方法,即DELETE、PUT等 -->
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>HEAD</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>All Role</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
四、使用curl测试
下载curl,下载地址:https://curl.haxx.se/download.html,如下图所示:
下载完成后,解压。
然后配置系统环境变量:
CURL_HOME D:\java\curl
在PATH中追加;%CURL_HOME%\I386
在CMD中输入命令:curl --help,如下图所示即安装成功:
然后使用 curl -v -X OPTIONS http://baidu.com 测试OPTIONS的 (http://baidu.cpm 这个是你自己的项目访问路径)。
成功的信息如下:
不会在出现 Allow:POST、GET、DELETE、OPTIONS、PUT、HEAD
最后 curl的下载和配置如下链接:
http://blog.csdn.net/qq_21126979/article/details/78690960?locationNum=10&fps=1