这容易受到 XSS 攻击吗?
Is this vulnerable to XSS?
我知道这很容易受到攻击,因为黑客可以嵌入访问网站 URL 的图像,并使用 'message' 参数进行各种操作:
<script>
var message = // get message parameter from URL, e.g domain.com?message=hello+there
document.write('Your message: ' + message);
</script>
...但是黑客有什么办法可以用它做任何事情吗(在没有任何其他 JS 的情况下单独使用)?:
<script>
function displayMessage(message) {
document.write(message);
}
</script>
显然我可以在浏览器中打开控制台并在其中键入任何内容,但是黑客是否可以以某种方式调用 JavaScript 方法(仅使用此代码)?
我知道如果网站在最顶部也有代码,可以调用该方法,但是方法可以单独调用吗?
顺便说一句。我并不是要执行上述操作,它只是帮助我理解这一点。
我尝试了什么?
- 阅读 owasp.org
上的大量文档
- Google 搜索的术语,例如“XSS - 你能调用一个方法吗”
- http://excess-xss.com/
- http://www.golemtechnologies.com/articles/prevent-xss#how-to-test-if-website-vulnerable-to-cross-site-scripting
- 输入此问题时阅读导航面板中显示的许多类似问题
在第一个代码中,message
是一个不受信任的字符串,可能包含恶意代码。将其解析为 HTML 可能会执行该代码:
var message = '<img src="//" onerror="alert(\'You are pwned!\')" />';
document.write('Your message: ' + message);
第二个密码不同。它只是一个函数,它本身没有 运行 任何东西。
当然,如果你用一个不受信任的字符串调用它,你会遇到和第一个一样的问题。因此,请不要这样做。
但是,攻击者无法调用任意函数。好吧,如果他们可以,那就意味着你已经被pwned了,所以这不再重要了。我的意思是,如果攻击者获得了足够的 "privileges" 来调用 displayMessage
,为什么还要调用它而不是直接调用 document.write
(或其他)?
我知道这很容易受到攻击,因为黑客可以嵌入访问网站 URL 的图像,并使用 'message' 参数进行各种操作:
<script>
var message = // get message parameter from URL, e.g domain.com?message=hello+there
document.write('Your message: ' + message);
</script>
...但是黑客有什么办法可以用它做任何事情吗(在没有任何其他 JS 的情况下单独使用)?:
<script>
function displayMessage(message) {
document.write(message);
}
</script>
显然我可以在浏览器中打开控制台并在其中键入任何内容,但是黑客是否可以以某种方式调用 JavaScript 方法(仅使用此代码)?
我知道如果网站在最顶部也有代码,可以调用该方法,但是方法可以单独调用吗?
顺便说一句。我并不是要执行上述操作,它只是帮助我理解这一点。
我尝试了什么?
- 阅读 owasp.org 上的大量文档
- Google 搜索的术语,例如“XSS - 你能调用一个方法吗”
- http://excess-xss.com/
- http://www.golemtechnologies.com/articles/prevent-xss#how-to-test-if-website-vulnerable-to-cross-site-scripting
- 输入此问题时阅读导航面板中显示的许多类似问题
在第一个代码中,message
是一个不受信任的字符串,可能包含恶意代码。将其解析为 HTML 可能会执行该代码:
var message = '<img src="//" onerror="alert(\'You are pwned!\')" />';
document.write('Your message: ' + message);
第二个密码不同。它只是一个函数,它本身没有 运行 任何东西。
当然,如果你用一个不受信任的字符串调用它,你会遇到和第一个一样的问题。因此,请不要这样做。
但是,攻击者无法调用任意函数。好吧,如果他们可以,那就意味着你已经被pwned了,所以这不再重要了。我的意思是,如果攻击者获得了足够的 "privileges" 来调用 displayMessage
,为什么还要调用它而不是直接调用 document.write
(或其他)?