
通过命令行工具 curl(默认不自动跳转)可直接获取含敏感信息的原始 html 响应,绕过 php 的 header("location: ...") 重定向,无需修改服务端代码或拥有网站控制权。
在 Web 开发与安全测试中,常遇到类似以下 PHP 代码:
This is sensitive information
该脚本虽调用了 header("Location: ...") 发送 HTTP 302 重定向响应头,但PHP 不会终止脚本执行——后续 HTML 内容(如
关键点在于:重定向由客户端(浏览器)执行,而非服务端强制拦截输出。因此,只要使用一个不自动处理重定向的 HTTP 客户端,就能捕获完整的原始响应体(含状态码 302 + 响应头 + 响应体中的 HTML 内容)。
✅ 推荐方案:使用 curl(默认禁用自动跳转)
立即学习“PHP免费学习笔记(深入)”;
curl http://example.com/vulnerable.php
此时 curl 将返回:
- HTTP 状态行(如 HTTP/1.1 302 Found)
- Location: page2.php 响应头
-
以及紧随其后的原始响应体:This is sensitive information
⚠️ 注意事项:
- curl 默认不跟随重定向(即不发送第二次请求),因此能完整捕获服务端原始输出;
- 若需显式确认行为,可加 -v 参数查看详细请求/响应过程:
curl -v http://example.com/vulnerable.php
- 切勿使用 -L(或 --location)参数——它会启用自动跳转,导致你最终只拿到 page2.php 的内容,丢失原始敏感信息;
- 此方法完全在客户端侧实现,无需服务器权限、不修改代码、不依赖浏览器插件,适用于渗透测试、CTF 或第三方站点调试场景。
? 补充说明:若目标站点启用了 X-Content-Type-Options: nosniff 或其他安全头,不影响本方案有效性——我们关注的是响应体的原始字节流,而非浏览器渲染逻辑。
总结:当无法控制服务端却需观察重定向前的完整响应时,curl 是最轻量、可靠且符合 HTTP 规范的解决方案。











