XSSを軽減しようとしています。これからどうすればシールドできますか:
jAvascript:alert('test2')
href
リンクの
私は次のことを試しましたが、javascript:
コード実行をトリガーできる適切な href ではなく、上記の文字列のリテラルの未解決の値を 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:
、結果の文字列に出現するすべての を解析して安全にすることができます。
私が考えていたもう1つのことは、誰かがそうしたらどうなるかということでした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;
}