私たちは最近、DOM XSS 攻撃についてテストされ、失敗した他の誰かのコードを搭載しました。基本的に、URL フラグメントは jQuery セレクターに直接渡され、次のように JavaScript を挿入できるようになっています。
"http://website.com/#%3Cimg%20src=x%20onerror=alert%28/XSSed/%29%3E)"
$(".selector [thing="+window.location.hash.substr(1)+"]");
問題は、これがスクリプト全体で発生しており、修正するために多くの回帰テストが必要になることです。たとえば、データをエスケープした場合、if ステートメントはデータが一致しないため true を返さなくなります。
問題の JavaScript ファイルは、ビルド時に多数の小さなファイルから連結されるため、修正がさらに困難になります。
各インスタンスを調べてデバッグすることなく、いくつかのグローバルコードでこれらの DOM XSS 攻撃を防ぐ方法はありますか?
スクリプトの先頭に少し正規表現を追加して、XSS 攻撃で使用される一般的な文字を検出し、true が返された場合は単純にスクリプトを強制終了することを提案しました。
var xss = window.location.href.match(/(javascript|src|onerror|%|<|>)/g);
if(xss != null) return;
これは機能しているように見えますが、私はこのソリューションに 100% 満足しているわけではありません。誰かが提供できるより良い解決策や有用な洞察を持っていますか?