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