CDN 改ざん検知 - サブリソース完全性(SRI)
CDN から読み込む JavaScript や CSS のハッシュ値を検証し、改ざんされたリソースの実行を防止する。
概念図
実例
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で生成可能
