Closed3

CSP ヘッダに 'unsafe-inline' を入れる理由

snakasnaka

'unsafe-inline' 入れたら Security の意味無いのでは?

そんなふうに考えていた時期が私にもありました。[1]

script-src 'self' 'unsafe-eval' 'unsafe-inline' https: http: 'nonce-${nonce}' 'strict-dynamic'

上記のように CSP ヘッダをセットする例を見かけるけど... 'unsafe-inline' 必要?

https://zenn.dev/snaka/articles/e474f6125ce9ef

脚注
  1. https://x.com/baki_anime/status/1292851181899755520 ↩︎

snakasnaka

理由は

古いブラウザでスクリプトを動作させるための fallback

  • サイトでインラインスクリプトを利用している。
  • インラインスクリプトを CSP のもとセキュアに利用する方法としては nonce がある。
  • nonce-... の指定があれば、モダンブラウザでは unsafe-inline は無視される。
    • つまりモダンブラウザではセキュリティが維持された状態でインラインスクリプトが実行できる
  • nonce-.. に対応していないような古いブラウザでは unsafe-inline が有効に働く。
    • 古いブラウザもスクリプトが実行できるようになる。
    • ただし、その場合古いブラウザではセキュリティを犠牲しながらインラインスクリプトを実行することになる

https://web.dev/articles/strict-csp

snakasnaka

つまり

モダンブラウザ上ではセキュリティを維持しつつ、古いブラウザ[1]ではセキュリティを犠牲するがスクリプトの実行はできる状態を目指した結果がこれ。

脚注
  1. そもそも、古いブラウザである時点でセキュリティ問題あるし、それをサポートするためだけにサイトの構成を大きく変えたくない。 ↩︎

このスクラップは2024/07/13にクローズされました