ブラウザーで検出された XSS 攻撃の window.Image オブジェクトをオーバーライドしたいと考えています。コードを参照してください:
(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>
だけにしたい。方法?