window.location = window.location 是否易受 XSS 攻击

Mil*_*ilk 8 javascript xss window.location

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

我的理解如下:

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

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

这样对吗?

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

cyt*_*nus 8

因此,如果我正确理解您的问题,那么这些答案都不正确。可以利用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>
Run Code Online (Sandbox Code Playgroud)

您可以利用字符串连接来推迟对 window.location 的分配,直到执行有效负载之后。所以像这样:

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

将生成以下执行您的有效负载的代码。

<script>
  window.location='derp' + alert('xss') + '';
</script>
Run Code Online (Sandbox Code Playgroud)

不过,这确实应该在安全 StackExchange 中。