应禁用HTTP TRACE请求以防XST攻击,方法包括:一、Apache中用TraceEnable off或LimitExcept;二、PHP入口处检测并返回405;三、.htaccess中RewriteRule拒绝;四、Nginx中if判断return 405;五、PHP内置服务器用router.php拦截。

如果您在PHP应用中接收到HTTP TRACE请求,该请求可能被用于跨站跟踪攻击(XST)或信息探测,存在安全风险。以下是处理HTTP TRACE请求的多种方法:
一、在Web服务器层面禁用TRACE方法
最直接有效的方式是在Web服务器配置中全局禁止TRACE HTTP方法,避免其到达PHP应用层。此方法不依赖PHP代码,从源头阻断风险。
1、对于Apache服务器,在主配置文件或虚拟主机配置中添加以下指令:
2、使用TraceEnable off指令关闭整个服务器的TRACE支持。
立即学习“PHP免费学习笔记(深入)”;
3、或使用LimitExcept限制允许的方法,确保TRACE不在列表中:
LimitExcept GET POST HEAD PUT DELETE OPTIONS
4、重启Apache服务使配置生效。
二、在PHP应用入口处拦截并拒绝TRACE请求
在所有请求经过的统一入口(如index.php或中间件)中检测请求方法,对TRACE请求立即返回405 Method Not Allowed响应,防止后续逻辑执行。
1、获取当前请求方法:$method = $_SERVER['REQUEST_METHOD'] ?? '';
2、判断是否为TRACE方法:if (strtoupper($method) === 'TRACE') {
3、输出标准HTTP 405响应头:header('HTTP/1.1 405 Method Not Allowed');
4、设置允许的方法头(不含TRACE):header('Allow: GET, POST, HEAD, PUT, DELETE, OPTIONS');
5、输出简明错误内容并终止脚本:echo 'Method not allowed.'; exit;
三、使用.htaccess规则重写或拒绝TRACE请求
适用于共享主机或无法修改主服务器配置的场景,通过Apache的.htaccess文件实现请求过滤,无需改动PHP源码。
1、在网站根目录的.htaccess文件中添加重写条件:
RewriteCond %{REQUEST_METHOD} ^TRACE
2、添加拒绝规则并返回403状态:RewriteRule .* - [F]
3、确保RewriteEngine On已启用。
4、保存文件后,所有TRACE请求将被Apache直接拒绝,不交由PHP处理。
四、在Nginx配置中屏蔽TRACE方法
若使用Nginx作为Web服务器,需在其server块中显式拒绝TRACE方法,因Nginx默认不支持TRACE,但需防止伪造或误配置导致意外响应。
1、在server配置段内添加if判断:
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|OPTIONS|PATCH)$) {
2、内部返回405状态:return 405;
3、关闭该if块:}
4、重新加载Nginx配置:nginx -s reload
五、通过PHP内置Web服务器过滤TRACE(开发环境专用)
当使用php -S启动内置服务器时,其默认不处理TRACE请求,但可借助路由器脚本主动拦截,增强本地调试安全性。
1、创建路由脚本router.php,作为内置服务器的入口路由文件。
2、在脚本开头读取$_SERVER['REQUEST_METHOD']。
3、若为TRACE,立即输出405响应并exit:
if ($_SERVER['REQUEST_METHOD'] === 'TRACE') { http_response_code(405); exit; }
4、其余请求按原逻辑分发至对应资源文件。



















