直接检查响应头最高效,PHP 7.4 网站安全头是否生效取决于 Web 服务器(Nginx/Apache)或 PHP-FPM 输出逻辑,而非 PHP 版本本身;需用 curl -I 验证 Strict-Transport-Security、X-Content-Type-Options、X-Frame-Options、Content-Security-Policy 等关键头是否存在且值合理,并结合 Burp Suite、ZAP、Nmap+NSE 多维度检测与定位缺失根源。

直接检查响应头是最高效的方式。PHP 7.4 网站本身不决定安全头是否生效,真正起作用的是 Web 服务器(如 Nginx、Apache)或 PHP-FPM 的输出控制逻辑。扫描的目标不是 PHP 版本,而是它所生成的 HTTP 响应中是否缺失关键安全头。
用 curl 快速抓取并验证响应头
在终端执行以下命令,查看目标页面实际返回的响应头:
curl -I https://your-site.com/
重点关注这几项是否存在且值合理:
-
Strict-Transport-Security:应包含
max-age=31536000; includeSubDomains; preload(启用 HTTPS 强制策略) -
X-Content-Type-Options:必须为
nosniff(防止 MIME 类型混淆) -
X-Frame-Options:推荐
DENY或SAMEORIGIN(防点击劫持) -
X-XSS-Protection:虽已过时,但若存在,不应设为
0;更推荐用 CSP 替代 -
Content-Security-Policy:至少包含基本指令如
default-src 'self',禁用内联脚本和 eval
用 Burp Suite 或 ZAP 做自动化覆盖检测
这类工具能批量扫描多个路径,并识别响应头缺失模式:
立即学习“PHP免费学习笔记(深入)”;
- 启动 Burp Suite,配置浏览器代理,正常浏览网站,让其捕获全部请求
- 右键目标域名 → “Engagement tools” → “Find issues” → 勾选 “Missing security headers”
- ZAP 中使用 “Active Scan” 后,在 “Alerts” 标签页筛选 “Missing Anti-Clickjacking Header”、“Missing Content Security Policy” 等关键词
- 注意:PHP 7.4 项目若用了框架(如 Laravel、Symfony),部分头可能由中间件注入,需确认是否对所有路由生效(比如 API 接口常被漏配)
排查 PHP 层是否意外覆盖或清空了安全头
即使服务器配置了默认头,PHP 脚本仍可能用 header() 或 http_response_code() 干扰:
- 搜索项目中所有
header(调用,尤其注意是否写了header('X-Frame-Options:')但没给值,或写了header('Content-Security-Policy:', true)(true表示替换而非追加) - 检查
php.ini是否启用了output_handler类扩展(如某些压缩或调试模块),它们可能拦截并重写响应头 - 运行
php --ini确认加载的是生产环境配置,避免开发机上display_errors = On导致错误信息泄露掩盖头配置问题
结合 Nmap + NSE 验证服务层配置
绕过应用逻辑,从网络服务角度确认基础防护是否就位:
- 执行:
nmap -p 443 --script http-security-headers your-site.com - 该脚本会独立检测 HSTS、CSP、XFO 等头,结果不依赖 PHP 输出,可判断是 Web 服务器配置缺失,还是 PHP 应用层覆盖所致
- 若 Nmap 报“missing”,但 curl 显示存在,说明 PHP 某处动态清除了头;若两者都报缺,则优先检查 Nginx/Apache 配置文件中的
add_header或Header set指令



















