我正在解析一个不受信任的 URI,但它的 URI-hood 必须得到尊重。我试图防止javascript:
链接,但我觉得我需要递归它,因为你可以:
javascriptjavascript::
并在删除所有实例后再次javascript:
找回我们的老朋友。javascript:
我的另一个问题是类似嵌套的 unicode 实体。例如,我们可以有:
"jAvascript:alert('pwnt')"
...但我们也可以有:
"j&#塁vascript:alert('pwnt')"
...尽管我似乎做错了(而成功的攻击者显然不会。)
function resolveEntities(uri) {
var s = document.createElement('span')
, nestTally = uri.match(/&/) ? 0 : 1
, limitReached = false;
s.innerHTML = uri;
while (s.textContent.match(/&/)) {
s.innerHTML = s.textContent;
if(nestTally++ >= 5) {
limitReached = true;
break;
}
}
return encodeURI(s.textContent);
}