为什么要禁止除GET和POST之外的HTTP方法?
字数 1444 2025-08-18 11:37:19

HTTP不安全方法漏洞分析与防护指南

一、HTTP请求方法概述

HTTP协议定义了多种请求方法,根据版本不同有所区别:

HTTP 1.0定义的方法

  • GET:请求指定的资源
  • POST:向指定资源提交数据进行处理请求
  • HEAD:与GET相同,但只返回头部信息

HTTP 1.1新增的方法

  • OPTIONS:返回服务器支持的HTTP方法
  • PUT:向指定位置上传最新内容
  • DELETE:请求服务器删除指定资源
  • TRACE:回显服务器收到的请求,用于测试或诊断
  • CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器

二、不安全HTTP方法的风险分析

1. OPTIONS方法风险

  • 暴露服务器信息:会返回服务器支持的HTTP方法、中间件版本等敏感信息
  • 攻击面扩大:为攻击者提供服务器能力信息,便于针对性攻击

2. PUT方法风险

  • 文件上传漏洞:允许客户端向服务器上传文件
  • WebShell上传:可被用于上传恶意脚本文件(如JSP、PHP等)
  • 无验证机制:默认不包含身份验证,容易滥用

3. DELETE方法风险

  • 资源删除:允许删除服务器上的文件
  • 数据破坏:可导致网站关键文件被删除,服务中断

4. TRACE方法风险

  • 跨站追踪攻击(XST):可能被用于窃取Cookie等敏感信息
  • 反射型XSS:在某些情况下可被利用进行跨站脚本攻击

5. CONNECT方法风险

  • 代理滥用:可能被用于建立隧道连接,绕过安全控制

三、漏洞验证与利用实例

测试环境搭建

  • 操作系统:Windows 10 64位
  • Web服务器:Tomcat 7.0.72
  • 测试工具:curl 7.49

关键配置修改

Tomcat默认配置中,web.xml文件的org.apache.catalina.servlets.DefaultServletreadonly参数默认为true,需改为false以演示漏洞:

<init-param>
    <param-name>readonly</param-name>
    <param-value>false</param-value>
</init-param>

漏洞利用步骤

  1. PUT上传文件测试

    curl -X PUT http://127.0.0.1:8080/examples/test.txt -d "test content"
    
  2. DELETE删除文件测试

    curl -X DELETE http://127.0.0.1:8080/examples/test.txt
    
  3. 绕过限制上传JSP文件

    • 直接上传.jsp文件会被JspServlet处理而失败
    • 利用特殊后缀绕过检测(CVE-2017-12615):
      curl -X PUT http://127.0.0.1:8080/examples/shell.jsp%20 -d "<% out.println("Hello JSP"); %>"
      
    • 其他绕过方法:
      • shell.jsp::$DATA
      • shell.jsp/
  4. OPTIONS方法信息收集

    curl -X OPTIONS http://127.0.0.1:8080/ -v
    

四、防护措施

1. 禁用不必要的HTTP方法

Tomcat配置方法
web.xml中添加以下配置:

<security-constraint>
    <web-resource-collection>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
        <http-method>OPTIONS</http-method>
        <http-method>TRACE</http-method>
        <http-method>CONNECT</http-method>
    </web-resource-collection>
    <auth-constraint></auth-constraint>
</security-constraint>

Nginx配置方法

if ($request_method !~ ^(GET|HEAD|POST)$ ) {
    return 405;
}

Apache配置方法

<Location "/">
    <LimitExcept GET POST>
        Deny from all
    </LimitExcept>
</Location>

2. 保持DefaultServlet的readonly为true

确保Tomcat配置中:

<init-param>
    <param-name>readonly</param-name>
    <param-value>true</param-value>
</init-param>

3. 定期安全扫描

使用工具检查服务器开放的HTTP方法:

curl -X OPTIONS http://example.com/ -v
nmap --script http-methods.nse example.com

4. 应用防火墙规则

在WAF中添加规则,拦截异常的HTTP方法请求。

五、自查指南

  1. OPTIONS方法测试

    curl -X OPTIONS http://yourwebsite.com/ -v
    

    检查返回的Allow头部是否包含不必要的方法

  2. PUT/DELETE方法测试

    • 测试PUT上传:
      curl -X PUT http://yourwebsite.com/testfile -d "test"
      
    • 测试DELETE删除:
      curl -X DELETE http://yourwebsite.com/existingfile
      
  3. 全面方法测试
    对每个目录测试所有HTTP方法,确认是否被禁用

六、总结建议

  1. 最小化原则:只开放业务必需的HTTP方法(通常只需GET和POST)
  2. 默认安全:新部署环境应默认禁用非常用方法
  3. 持续监控:定期检查服务器配置和开放的方法
  4. 分层防御:在网络层、主机层和应用层同时实施防护
  5. 及时更新:保持中间件版本最新,修复已知漏洞

通过以上措施,可有效降低因不安全HTTP方法导致的安全风险,保护Web服务器免受攻击。

HTTP不安全方法漏洞分析与防护指南 一、HTTP请求方法概述 HTTP协议定义了多种请求方法,根据版本不同有所区别: HTTP 1.0定义的方法 : GET:请求指定的资源 POST:向指定资源提交数据进行处理请求 HEAD:与GET相同,但只返回头部信息 HTTP 1.1新增的方法 : OPTIONS:返回服务器支持的HTTP方法 PUT:向指定位置上传最新内容 DELETE:请求服务器删除指定资源 TRACE:回显服务器收到的请求,用于测试或诊断 CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 二、不安全HTTP方法的风险分析 1. OPTIONS方法风险 暴露服务器信息 :会返回服务器支持的HTTP方法、中间件版本等敏感信息 攻击面扩大 :为攻击者提供服务器能力信息,便于针对性攻击 2. PUT方法风险 文件上传漏洞 :允许客户端向服务器上传文件 WebShell上传 :可被用于上传恶意脚本文件(如JSP、PHP等) 无验证机制 :默认不包含身份验证,容易滥用 3. DELETE方法风险 资源删除 :允许删除服务器上的文件 数据破坏 :可导致网站关键文件被删除,服务中断 4. TRACE方法风险 跨站追踪攻击(XST) :可能被用于窃取Cookie等敏感信息 反射型XSS :在某些情况下可被利用进行跨站脚本攻击 5. CONNECT方法风险 代理滥用 :可能被用于建立隧道连接,绕过安全控制 三、漏洞验证与利用实例 测试环境搭建 操作系统:Windows 10 64位 Web服务器:Tomcat 7.0.72 测试工具:curl 7.49 关键配置修改 Tomcat默认配置中, web.xml 文件的 org.apache.catalina.servlets.DefaultServlet 的 readonly 参数默认为true,需改为false以演示漏洞: 漏洞利用步骤 PUT上传文件测试 DELETE删除文件测试 绕过限制上传JSP文件 直接上传.jsp文件会被JspServlet处理而失败 利用特殊后缀绕过检测(CVE-2017-12615): 其他绕过方法: shell.jsp::$DATA shell.jsp/ OPTIONS方法信息收集 四、防护措施 1. 禁用不必要的HTTP方法 Tomcat配置方法 : 在 web.xml 中添加以下配置: Nginx配置方法 : Apache配置方法 : 2. 保持DefaultServlet的readonly为true 确保Tomcat配置中: 3. 定期安全扫描 使用工具检查服务器开放的HTTP方法: 4. 应用防火墙规则 在WAF中添加规则,拦截异常的HTTP方法请求。 五、自查指南 OPTIONS方法测试 检查返回的 Allow 头部是否包含不必要的方法 PUT/DELETE方法测试 测试PUT上传: 测试DELETE删除: 全面方法测试 对每个目录测试所有HTTP方法,确认是否被禁用 六、总结建议 最小化原则 :只开放业务必需的HTTP方法(通常只需GET和POST) 默认安全 :新部署环境应默认禁用非常用方法 持续监控 :定期检查服务器配置和开放的方法 分层防御 :在网络层、主机层和应用层同时实施防护 及时更新 :保持中间件版本最新,修复已知漏洞 通过以上措施,可有效降低因不安全HTTP方法导致的安全风险,保护Web服务器免受攻击。