我想覆盖 window.Image 对象以检测到浏览器上的一些 XSS 攻击。看代码:
(function(){
if(typeof(window.Image)!=="object"){
var _original_Image=new Image();
Object.defineProperty(_original_Image,'src', {
set: function(srcAttr){
if(/document\.cookie/.test(srcAttr)){console.log('cookie attack!')};
_original_Image.setAttribute('src',srcAttr);
},
get: function(){return _original_Image.src};
})
window.Image = function(){ return _original_Image };
return _original_Image;
}
}())
运行。
>>> a = new Image()
<img>
>>> a.src="document.cookie"
cookie attack!
GET http://192.168.0.2/document.cookie 404 (Not Found)
>>> document.body.appendChild(a)
<img src="document.cookie">
图像已成功附加。
但有一些问题。看
>>> b = new Image()
<img src="document.cookie">
它意味着原始的 HTMLImageElement 已更改,它将具有最后一个 img 元素的属性。
我只想让它返回<img>
。如何?