我正在尝试缓解 XSS。我怎样才能避免这种情况:
jAvascript:alert('test2')
在href
一个链接?
我尝试了以下方法,但它只是将上述字符串的文字、未解析值分配为 href 的相对路径,而不是javascript:
能够触发代码执行的正确 href。我想知道攻击者如何能够利用它。
我尝试了以下方法:
a = document.createElement('a');
然后这两个:
a.href = 'jAvascript:alert('test2')';
还有这个:
a.setAttribute('href', "jAvascript:alert('test2')");
但是两者都"jAvascript:alert('test2')"
在查询时返回a.href
,而不是期望的(或不期望的,取决于您的观点)javascript:alert('test2');
如果我可以让所有实体解析,那么我可以解析出javascript:
结果字符串中所有出现的 ,并且是安全的——对吗?
我在想的另一件事是,如果有人这样做怎么办jvascript:steal_cookie();
。我的意思是,从理论上讲,它们可以具有无限的递归级别,并且最终都会解决,对吗?
编辑:这段代码看起来如何?
function resolve_entities(str) {
var s = document.createElement('span')
, nestTally = str.match(/&/) ? 0 : 1
, limit = 5
, limitReached = false;
s.innerHTML = str;
while (s.textContent.match(/&/)) {
s.innerHTML = s.textContent;
if(nestTally++ >= limit) {
limitReached = true;
break;
}
}
return s.textContent;
}