我正在考虑从环境中直接将一堆环境HTTP变量原始打印到HTML中。
似乎所有变量都应该安全直接进入HTML,因为它们可以由客户端直接控制,也可以由其代理服务器控制。
$http_referer
除外。
是否有可能HTTP_REFERER
可用于跨站点脚本攻击?它似乎总是应该在适当的浏览器中进行URL编码;是这样的吗?
答案 0 :(得分:1)
您似乎正在实现与TRACE
HTTP方法类似的功能,尽管在HTML中。
查看Cross Site Tracing以了解您应该注意的一些漏洞(例如,如果任何XSS漏洞也存在,那么在页面中只显示HTTP,然后可以通过JavaScript读取这些漏洞)。
回答你的问题 - 如果你输出的是HTML,为什么不编码HTML?
如果你的问题更多的是理论上的讨论,而不是你正在做出的实际决定,那么在referer标题中提供的URL应该是正确的百分比编码。
这意味着攻击者通过页面http://example.com/<script>alert('foo')</script>
重定向受害者应生成以下标题。
Referer: http://example.com/%3Cscript%3Ealert%28%27foo%27%29%3C/script%3E
哪个 不会触发XSS攻击。但是,所有浏览器都以不同的方式实现,我不会完全依赖它们。例如,这是从网址http://127.0.0.1/%3Cscript%3Ealert(%27foo%27)
(文件名<script>alert('foo')
)重定向后Burp中显示的引用。浏览器百分比在原始请求之前编码了URL http://127.0.0.1/<script>alert('foo')
的请求,因此引用者将使用已转换的URL。