CSPは、ヘッダーで事前に承認されていないリソースの読み込み、つまりXSSに対する優れた保護を制限します。 攻撃者はサードパーティのスクリプトをダウンロードできません。インラインスクリプトも無効になっています...
ブラウザレベルでは、特定のURLのダウンロードのみを許可できますが、他のURLは禁止されます。 このメカニズムの利点に加えて、害をもたらす可能性があります-結局のところ、ブロックの事実は検出です! それを適用する方法を理解することだけが残っています。
function does_redirect(url, cb){ var allowed = url.split('?')[0]; var frame = document.getElementById('playground'); window.cb = cb; window.tm = setTimeout(function(){ window.cb(false); },3000); frame.src = 'data:text/html,<meta http-equiv="Content-Security-Policy" content="img-src '+allowed+';"><img src="'+url+'" onerror=parent.postMessage(1,"*") onload=parent.postMessage(2,"*")>' }
特定のURLが別のURLにリダイレクトされるかどうかを確認できます。また、場合によっては、たとえば1〜100万の総計で特定のURLを計算することもできます(これにはさらに時間がかかります)
デモページをお試しください。
このバグの最もクールな点は、「正しく」修正できないことです。 これは、リソースがロードされたかどうかを検出することに基づいており、CSPタスクはリソースをブロックすることで、ロードを防止します。 私が見る唯一の解決策は、onloadイベントの「エミュレーション」です。XSSAuditorの同様のバグで行われたURL(興味深いバグですが、まだ修正されていません)へのリダイレクトを試すことができます。
現時点では、保護は導入されていません。これは、長い間、多くのリソースでユーザーIDを検出し、そのユーザーがSomeSiteユーザーであるかどうかを検出できることを意味します。 Firefox、Safari、Chromeで動作し、IEでのサポートは非常に限られていますが、すぐに修正されます。