我知道这很容易受到攻击,因为黑客可能会嵌入一个访问网站网址的图片,并使用'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方法(仅使用此代码)?
我知道如果网站的代码位于最顶层,可以调用该方法,但是可以自己调用方法吗?
顺便说一下。我并不想完成上述任务,只是帮助我理解这一点。
我尝试了什么?
答案 0 :(得分:2)
在第一个代码中,message
是一个不受信任的字符串,可能包含恶意代码。将其解析为HTML可以执行该代码:
var message = '<img src="//" onerror="alert(\'You are pwned!\')" />';
document.write('Your message: ' + message);
第二个代码不同。它只是一个功能,它本身不会运行任何东西。
当然,如果使用不受信任的字符串调用它,则会遇到与第一个问题相同的问题。因此,不要这样做。
然而,攻击者无法调用任意函数。好吧,如果他们可以的话,这意味着你已经知道了,所以不再重要了。我的意思是,如果攻击者获得了足够的“权限”以便能够调用displayMessage
,为什么还要打扰它而不是直接调用document.write
(或其他)?