凌峰创科服务平台

服务器启用trace method有何安全风险?

  1. 什么是 TRACE 方法?
  2. 它为什么是安全风险?
  3. 如何检查服务器是否启用了 TRACE
  4. 如何禁用 TRACE 方法?

什么是 TRACE 方法?

TRACE 是 HTTP 协议中定义的一种请求方法,其主要目的是用于诊断和调试

服务器启用trace method有何安全风险?-图1
(图片来源网络,侵删)

当一个客户端(如浏览器)向服务器发送 TRACE 请求时,服务器会收到这个请求,然后将收到的原始请求头(Headers)和请求体(Body)原封不动地作为响应体(Body)返回给客户端。

TRACE 就像一面镜子,服务器会把所有关于这次请求的细节都“照”出来给你看。


为什么 TRACE 是安全风险?

TRACE 方法本身的设计意图是无害的,但它会引发一个严重的安全漏洞,这个漏洞被称为 跨站跟踪攻击

攻击原理如下:

服务器启用trace method有何安全风险?-图2
(图片来源网络,侵删)
  1. 窃取会话 Cookie: 许多现代网站为了防止跨站请求伪造,会在响应头中设置一个标志,HttpOnlySecure 的 Cookie,或者一个名为 SameSite 的属性,这些标志旨在防止恶意网站通过脚本(如 JavaScript)读取或发送这些 Cookie。
  2. 绕过保护: 攻击者可以诱导你登录了一个目标网站(比如你的网上银行),攻击者会诱使你的浏览器向这个已登录的网站发起一个 TRACE 请求,这个请求会自动携带你当前的会话 Cookie。
  3. 信息泄露: 由于 TRACE 请求会返回完整的原始请求,其中就包含了你被窃取的 Cookie 信息。
  4. 会话劫持: 攻击者获取到你的 Cookie 后,就可以在自己的浏览器中使用这个 Cookie 来冒充你的身份,完全控制你的会话,从而访问你的账户、进行转账等操作。

TRACE 方法绕过了浏览器为防范 CSRF 而设置的安全策略,成为了攻击者窃取敏感会话信息的“后门”,在生产环境中,TRACE 方法不应该被启用


如何检查服务器是否启用了 TRACE

您可以使用命令行工具 curl 或在线安全扫描工具来检查。

使用 curl (推荐)

在您的命令行中,对您的服务器域名或 IP 地址执行以下命令:

curl -v -X TRACE http://your-server.com
  • -v:显示详细的通信过程(verbose mode)。
  • -X TRACE:指定使用 TRACE 方法发送请求。

如何解读结果:

服务器启用trace method有何安全风险?-图3
(图片来源网络,侵删)
  • 如果服务器禁用了 TRACE 您会收到一个 405 Method Not Allowed (方法不允许) 或 501 Not Implemented (未实现) 的 HTTP 状态码。

    < HTTP/1.1 405 Method Not Allowed
    < Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS

    这表示服务器拒绝执行 TRACE 方法,并且通常会在 Allow 响应头中列出它所支持的方法。这是安全的状态。

  • 如果服务器启用了 TRACE 您会收到一个 200 OK 的 HTTP 状态码,并且响应体中会完整地显示您刚才发送的 TRACE 请求头。

    < HTTP/1.1 200 OK
    ... (其他响应头) ...
    TRACE / HTTP/1.1
    Host: your-server.com
    User-Agent: curl/7.81.0
    Accept: */*

    看到 200 OK 并且响应体里有请求内容,说明您的服务器存在安全漏洞,需要立即修复!


如何禁用 TRACE 方法?

禁用方法取决于您使用的 Web 服务器类型。

针对 Apache 服务器

使用 mod_rewrite (推荐)

这是最简单、最通用的方法,适用于大多数 Apache 配置。

在您的 Apache 主配置文件(通常是 httpd.conf)或虚拟主机配置文件中,添加以下指令:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_METHOD} ^TRACE
  RewriteRule .* - [F]
</IfModule>
  • RewriteEngine On:开启重写引擎。
  • RewriteCond %{REQUEST_METHOD} ^TRACE:匹配所有请求方法为 TRACE 的请求。
  • RewriteRule .* - [F]:对匹配到的请求返回一个 403 Forbidden 错误,并阻止其继续处理。

使用 mod_headers

您也可以通过添加一个自定义响应头来禁用 TRACE

<IfModule mod_headers.c>
  Header always unset TRACE
</IfModule>

在您的虚拟主机配置中,明确拒绝 TRACE 方法:

<LimitExcept GET POST HEAD PUT DELETE OPTIONS CONNECT PATCH PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
  Require all denied
</LimitExcept>

这个 <LimitExcept> 块会允许括号里列出的所有方法,并拒绝其他所有方法(包括 TRACE)。

应用更改: 保存文件后,重启或重新加载 Apache 配置:

sudo systemctl reload apache2  # (对于 Debian/Ubuntu)
sudo systemctl reload httpd    # (对于 CentOS/RHEL)

针对 Nginx 服务器

Nginx 默认不启用 TRACE 方法,但如果您的自定义配置中启用了,可以这样禁用。

在您的 Nginx 配置文件(如 nginx.conf 或站点配置文件)的 server 块中,添加以下指令:

server {
    # ... 其他配置 ...
    # 禁用 TRACE 方法
    if ($request_method = 'TRACE') {
        return 405;
    }
    # 或者更严格的写法
    # if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|OPTIONS|PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK|PATCH)$ ) {
    #     return 405;
    # }
    # ... 其他配置 ...
}

应用更改: 保存文件后,重启或重新加载 Nginx 配置:

sudo systemctl reload nginx

针对 Tomcat 服务器

在 Tomcat 的 web.xml 部署描述符中,您可以禁用特定的 HTTP 方法。

在您的 Web 应用的 WEB-INF/web.xml 文件中,添加以下内容:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Entire Application</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>TRACE</http-method>
    </web-resource-collection>
    <auth-constraint>
        <!-- 这里可以留空,表示完全禁止 -->
    </auth-constraint>
</security-constraint>

应用更改: 保存 web.xml 文件后,重启 Tomcat 服务器。


步骤 操作
检查 使用 curl -v -X TRACE http://your-server.com 确认漏洞是否存在。
修复 根据您的服务器类型(Apache/Nginx/Tomcat),选择相应的方法进行配置修改。
验证 修复后,再次使用 curl 命令检查,确保返回 405 Method Not Allowed
重启 重载或重启您的 Web 服务器,使配置生效。
持续监控 定期进行安全扫描,或使用工具(如 nmap--script http-trace)来确保 TRACE 方法不会被意外重新启用。

重要提示: 在修复前,请务必备份您的服务器配置文件,以防配置错误导致服务中断,如果对操作不熟悉,建议咨询专业的系统管理员或安全专家。

分享:
扫描分享到社交APP
上一篇
下一篇