这个问题与代码window.location = window.location有关,它是刷新页面的一种方法,与重定向/其他变量无关。
我的理解如下:
window.location = window.location会导致页面刷新,因为浏览器将导航到用户已经打开的相同位置。
通过DOM操作对该变量进行的任何更改都将导致页面重新加载/加载攻击者页,因此这些行将无法使用更改的值执行,因此不适合跨站点脚本攻击。
是对的吗?
编辑:我真正想问的是,如果有一种方法可以在不导致页面重新加载的情况下更改window.location,那么当进行window.location = window.location调用时,浏览器将被发送到另一个位置。
发布于 2020-06-24 20:26:14
因此,如果我理解你的要求是正确的,这些答案都是不正确的。可以利用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中实现的。
发布于 2016-07-17 22:08:16
这个问题与window.location无关,与您如何处理新上下文中使用的任意数据有关。
如果您从URL获取输入并使用它构建要重定向到的新URL,那么您就会发现问题所在。以经典的重定向页面..。
http://example.com/redirect?url=http%3A%2F%2Fsomethingevil如果页面上有JavaScript,然后将window.location设置为查询字符串参数url的值,则该页面将转到http://somethingevil。
XSS的主要方法是允许查询字符串参数将数据注入页面本身。例如,您可能有一个页面,上面写着“HelloBrad”,其中"Brad“来自名为name的URL参数。现在,假设攻击者将URL设置为name=%3Cscript%20src%3D%22http%3A%2F%2Fexample.com%2Fevil.js%22%3E%3C%2Fscript%3E。如果我只是将name的值直接注入页面,那么我的脚本evil.js将在该页面上运行。如果我正确地转义数据,那么它可以在页面中使用,因为它将被解释为文本。
https://stackoverflow.com/questions/38426351
复制相似问题