Javascript location.href安全问题

Javascript location.href安全问题,javascript,html,security,Javascript,Html,Security,这是我的页面test.html: <script type="text/javascript"> document.write(location.href); </script> 所以很明显,location.href不仅仅返回前面提到的URL字符串: 返回值:一个字符串,表示页面的整个URL,包括协议(如http://) 它返回URL编码版本的字符串 所以我的问题是:做document.write(location.href)安全吗?恶意用户是否会将X

这是我的页面test.html:

<script type="text/javascript">
        document.write(location.href);
</script>
所以很明显,location.href不仅仅返回前面提到的URL字符串:

返回值:一个字符串,表示页面的整个URL,包括协议(如http://)

它返回URL编码版本的字符串

所以我的问题是:做
document.write(location.href)安全吗?恶意用户是否会将XSS负载放入其中

假设这没有打印到
或任何HTML标记中,因此您必须像我一样将标记传递到location.href


编辑:我想我应该提到我是一名安全分析师。我试图利用它,以便向我的客户证明这不是一个好的做法,但我找不到这样做的方法。所以,没必要教训我。

http://example.com/test.html?test=alert('xss')
是无效的URL。浏览器的位置字段并不局限于有效的URL,它们在解析输入URL时几乎可以接受任何内容,包括路径中的无效字符、查询字符串和片段。发送到服务器的请求是已解析URL的序列化版本,并且始终是有效URL,通过百分比编码字符获得,这些字符不能合法地出现在URL的各个部分中

URL是一个抽象概念:
location.href
返回一个字符串,该字符串在语义上等同于用于将浏览器导航到该资源的字符串-它不一定是同一个字符串。直到最近,根据规范,唯一的要求是返回的字符串必须是URL的表示形式,而不需要说明可能的表示形式(还有很多!)


尽管如此,一些方案的解析方式不同。观察
数据:text/html、警报(location.href)产生-一个确切的字符串警报,至少在Firefox38和Chrome42中是这样。我找不到任何可导航的HTTP/HTTPS URL,只要您将“外来”数据转储到页面中,就会出现
xss。不管它来自哪里——如果它来自“外部”,理论上它是脆弱的。这包括您自己生成的数据。
location.href
完全不可信。如果你想在不转义的情况下将其注入页面,这是自找麻烦。仅仅因为你的浏览器有特定的url(你会在位置栏中看到相同的url),这并不意味着什么。另外,请不要使用
文档。写
,这是非常低效的(因为它会触发重新分析)。相反,请使用DOM API(
document.createElement
etc)。“很明显,location.href不仅返回此处提到的URL字符串:”-而且只返回字符串。您是使用
document.write将其写入文档的人
http://example.com/test.html?test=%3Cscript%3Ealert(%27xss%27)%3C/script%3E