使用URL哈希在XSS攻击中重新定义转义函数

时间:2014-07-20 06:18:52

标签: javascript jquery security xss

这与使用jQuery选择器的XSS attack有关。我在我的代码中读取url哈希。如果我有像这样的格式错误的网址

http://www.example.com/#<img src='/' onerror='alert(1)'>

在创建选择器之前,一种安全的解决方法是在我的代码中使用escape函数(例如_.escape)(我知道我可以使用$('body').find(...)避免这种情况,但我的问题并不是要避免它)

var wHash = escape(window.location.hash.replace('#',''));
$(wHash);

问题:是否可以在有效负载内重新定义escape,使其无效。像这样:

<img src='/' onerror='(function(){window.escape = function(x) { return x; } })()'>    

我无法精确地制作它以使其正常工作,但我想知道是什么阻止攻击者从网址哈希中重新定义代码的escaping部分?

1 个答案:

答案 0 :(得分:2)

wHash = escape(…)$(wHash)之前执行,这将从<img …>创建图像元素。但是,当escape之前修改值时,它由$进行评估,escape函数重新定义只会在之后发生已被召唤。