私は最近、このような_<a>
_タグからJavaScriptを実行できることを発見しました
<a href="javascript:alert('test')">
これをクリックすると、現在のページで実行されます。また、クリックされたページのコンテキストで実行され、Webサイトのローカルストレージにアクセスできます。これを防ぎたい。 CSPを使用してインラインJavaScriptブロックをブロックできることはわかりますが、これにこれらのJavaScriptリンクが含まれているかどうかはわかりません。
CSPヘッダーを追加すると、これらのJSリンクが機能しなくなりますか?
ローカルHTMLファイルを使用した簡単なテストで質問に答えることができます。
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
<a href="javascript:alert('test')">click me</a>
リンクをクリックしようとすると、JavaScriptが実行されません。 Chromeのデベロッパーツールでコンソールを見ると、次のことがわかります。
次のコンテンツセキュリティポリシーディレクティブ「script-src 'self'」に違反しているため、JavaScript URLの実行を拒否しました。インライン実行を有効にするには、「unsafe-inline」キーワード、ハッシュ(「sha256 -...」)、またはナンス(「nonce -...」)のいずれかが必要です。
Unsafe-inlineを提案どおりに追加すると、代わりに期待どおりに機能します。つまり、スクリプトが実行されます。
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'">
<a href="javascript:alert('test')">click me</a>
また、 CSPのドキュメント から:
'unsafe-inline'
インライン要素、javascript:URL、インラインイベントハンドラー、インライン要素などのインラインリソースの使用を許可します。一重引用符を含める必要があります