XSS是否可以利用HTML中的原始打印HTTP_REFERER?

XSS是否可以利用HTML中的原始打印HTTP_REFERER?,html,security,http,xss,url-encoding,Html,Security,Http,Xss,Url Encoding,我正在考虑将环境中的一组环境HTTP变量直接打印到HTML中 似乎所有变量都应该安全地直接进入HTML,因为它们要么直接由客户端控制,要么由代理服务器控制 除了$http\u referer HTTP\u REFERER是否有可能被用于跨站点脚本攻击?它似乎总是被认为是正确的浏览器中的URL编码;是这样吗?看起来您实现了与HTTP方法类似的功能,尽管是在HTML中 检查您应该注意的一些漏洞(例如,如果存在任何XSS漏洞,页面中只显示HTTP cookie,然后JavaScript可以读取这些co

我正在考虑将环境中的一组环境HTTP变量直接打印到HTML中

似乎所有变量都应该安全地直接进入HTML,因为它们要么直接由客户端控制,要么由代理服务器控制

除了
$http\u referer


HTTP\u REFERER
是否有可能被用于跨站点脚本攻击?它似乎总是被认为是正确的浏览器中的URL编码;是这样吗?

看起来您实现了与HTTP方法类似的功能,尽管是在HTML中

检查您应该注意的一些漏洞(例如,如果存在任何XSS漏洞,页面中只显示HTTP cookie,然后JavaScript可以读取这些cookie)

回答您的问题-如果您要输出到HTML,为什么不进行HTML编码呢

如果你的问题更多的是理论上的讨论,而不是你正在做的实际决定,那么是的,在referer头中显示的URL应该正确地进行百分比编码

这意味着攻击者通过页面
http://example.com/alert('foo')
应生成以下标题

Referer: http://example.com/%3Cscript%3Ealert%28%27foo%27%29%3C/script%3E
不应触发XSS攻击。然而,所有浏览器的实现方式都不同,我不会正确地依赖它们,因为它们都遵循标准。例如,这是在URL
重定向后显示的refererhttp://127.0.0.1/%3Cscript%3Ealert(%27foo%27)
(文件名
alert('foo')
)。浏览器对URL
http://127.0.0.1/alert('foo')
在原始请求之前,因此referer将使用已转换的URL


不要依赖任何你无法直接控制的东西<代码>HTTP_REFERER很容易被欺骗、错误或不存在。“我正在考虑从环境中直接将一堆环境HTTP变量原始打印到HTML中”——因为这就是你已经出错的地方,这也是你唯一需要解决的问题。因此,只要应用您的环境为正确转义此类输出提供的任何方法,整个问题就会变得无效。@CBroe,我正在使用nginx生成内容(例如,类似于),而nginx似乎不支持转义。@HoboSapiens,我一点也不在乎它是否被欺骗。我只关心攻击者没有办法通过真正的浏览器提供
,而且只有当这种浏览器将我的页面解释为
text/html
“我正在使用nginx生成内容”—不知道这到底意味着什么,但是你能不能先通过别的渠道介绍一下?你介意提供一些参考资料吗?我已经查看了用于URL编码的RFC(rfc3986?),以及HTTP规范本身(rfc7231?),但没有发现任何关于引用者字段中的URL必须始终是URL编码的内容。事实上,从RFC3986中,我不知何故得到了这样的印象:URL不一定总是经过URL编码的(事实上,当它们显示在许多现代浏览器的地址栏中时,这种情况已经存在,即使在复制粘贴时,字符串实际上是经过URL编码的,例如查看)。是的,RFC 3986<代码>路径由
段组成
段由
pchar
段组成,段是
无保留的/pct-encoded/sub-delims/“:“/”@“
@cnst:我想知道,在将其输出到HTML anway之后,是否有任何原因不进行HTML编码?正如我已经提到的,我正在使用nginx.conf来编写网站(例如,与书写方式类似)