每日漏洞 | 不安全的HTTP方法
字数 1412 2025-08-18 11:38:32
不安全的HTTP方法漏洞详解与防护指南
一、HTTP方法概述
HTTP协议定义了一组请求方法,用于对资源执行不同的操作:
安全方法(Safe Methods)
- GET:获取资源
- HEAD:获取资源头信息
- OPTIONS:查询资源支持的方法
- TRACE:回显请求(用于测试)
不安全方法(Unsafe Methods)
- PUT:上传/更新资源
- DELETE:删除资源
- PATCH:部分修改资源(RFC 5789)
- WebDAV扩展方法:
- COPY:复制资源
- MOVE:移动资源
- PROPFIND:获取属性
- PROPPATCH:修改属性
- MKCOL:创建集合
- LOCK:锁定资源
- UNLOCK:解锁资源
注意:安全方法并非绝对安全,如使用GET传输敏感数据仍可能导致安全问题。
二、不安全HTTP方法的风险
-
PUT方法风险:
- 允许攻击者上传恶意文件
- 可能覆盖现有重要文件
- 结合COPY/MOVE方法可修改文件位置和类型
-
DELETE方法风险:
- 允许攻击者删除服务器重要文件
- 可能导致服务中断或数据丢失
-
TRACE方法风险:
- 可能导致跨站追踪攻击(XST)
- 可能泄露敏感头信息(如Cookie)
-
WebDAV方法风险:
- 提供过多文件系统操作权限
- 可能被利用进行服务器配置篡改
三、漏洞检测方法
1. 查询支持的方法
使用OPTIONS方法检测:
OPTIONS / HTTP/1.1
Host: example.com
响应分析:
- 检查
Allow或Public头字段 - 示例响应:
HTTP/1.1 200 OK Allow: GET, POST, PUT, DELETE, OPTIONS
2. 验证方法实际支持情况
TRACE方法验证:
TRACE / HTTP/1.1
Host: example.com
- 如果返回请求内容,则支持TRACE
- 如果不支持,通常返回405 Method Not Allowed
PUT/DELETE方法验证:
-
使用PUT上传测试文件:
PUT /testfile.txt HTTP/1.1 Host: example.com Content-Length: 11 test content- 成功返回201 Created
- 已有资源返回204 No Content
-
使用DELETE删除测试文件:
DELETE /testfile.txt HTTP/1.1 Host: example.com- 成功返回200 OK或204 No Content
重要原则:测试PUT/DELETE时务必使用测试文件,避免影响生产环境。
四、漏洞修复方案
1. 服务器配置禁用
Apache配置:
<Location "/">
<LimitExcept GET POST HEAD OPTIONS>
Deny from all
</LimitExcept>
</Location>
Nginx配置:
location / {
if ($request_method !~ ^(GET|HEAD|POST|OPTIONS)$ ) {
return 405;
}
}
IIS配置:
- 打开IIS管理器
- 选择站点 → 请求过滤
- 添加不允许的动词:PUT, DELETE, TRACE等
2. Web应用层防护
Java Web (web.xml):
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
ASP.NET (web.config):
<system.webServer>
<security>
<requestFiltering>
<verbs allowUnlisted="true">
<add verb="PUT" allowed="false"/>
<add verb="DELETE" allowed="false"/>
<add verb="TRACE" allowed="false"/>
</verbs>
</requestFiltering>
</security>
</system.webServer>
3. 中间件防护
使用WAF规则:
- 拦截包含危险HTTP方法的请求
- 示例规则:
SecRule REQUEST_METHOD "^(PUT|DELETE|TRACE)$" "id:10001,phase:1,deny,status:405,msg:'Unsafe HTTP method detected'"
五、最佳实践建议
-
最小权限原则:
- 只开放业务必需的方法
- 默认禁用所有不必要方法
-
定期安全审计:
- 使用自动化工具扫描HTTP方法支持情况
- 人工验证关键接口
-
敏感操作保护:
- 对必须使用的PUT/DELETE方法实施严格认证
- 添加CSRF防护
- 记录操作日志
-
WebDAV服务:
- 非必要不启用WebDAV
- 如必须使用,限制访问IP并启用强认证
-
TRACE方法:
- 生产环境应始终禁用
- 测试环境使用后及时关闭
六、测试工具推荐
-
Burp Suite:
- 使用Repeater模块手动测试
- 使用Scanner自动检测
-
Nmap脚本:
nmap --script http-methods <target> -
curl命令:
curl -X OPTIONS http://example.com -I curl -X TRACE http://example.com -
OWASP ZAP:
- 自动扫描不安全HTTP方法
- 提供详细报告
通过全面了解不安全的HTTP方法及其风险,实施适当的检测和防护措施,可以有效提升Web应用的安全性,防止攻击者利用这些方法危害系统。