Secure Steady
CDN 改ざん検知 - サブリソース完全性(SRI) の使い方・オプション・サンプル

CDN 改ざん検知 - サブリソース完全性(SRI)

CDN から読み込む JavaScript や CSS のハッシュ値を検証し、改ざんされたリソースの実行を防止する。

概念図

サブリソース完全性(SRI) diagram

実例

CDN からのスクリプト読み込みに SRI を適用

bash
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"
  integrity="sha384-OYRe3t2YjSlW..."
  crossorigin="anonymous"></script>

CSS にも SRI を適用可能

bash
<link rel="stylesheet"
  href="https://cdn.example.com/style.css"
  integrity="sha384-abc123..."
  crossorigin="anonymous">

仕組み

SRI は <script><link> タグに integrity 属性を付与し、リソースのハッシュ値(SHA-256 / SHA-384 / SHA-512)を指定する。

ブラウザはリソースをダウンロードした後にハッシュを計算し、integrity 属性の値と一致しない場合はリソースの実行をブロックする。

これにより、CDN がハッキングされたり、中間者攻撃でスクリプトが差し替えられた場合でも、改ざんされたコードが実行されることを防げる。

導入のポイント

  • crossorigin 属性が必須: 外部オリジンのリソースには crossorigin="anonymous" を指定する
  • バージョン固定: SRI はリソースの内容が変わるとハッシュが一致しなくなるため、CDN URL はバージョンを固定する
  • CSP との併用: require-sri-for ディレクティブで SRI のないスクリプト読み込みを禁止できる
  • ハッシュの生成: openssl dgst -sha384 -binary lib.js | openssl base64 -A で生成可能

関連トピック