サブリソース完全性 (SRI)
サブリソース完全性 (SRI) とは何ですか?
サブリソース完全性 (SRI)サードパーティから読み込んだスクリプトやスタイルシートを実行する前に、ブラウザが暗号学的ハッシュを検証し、改ざんされたファイルの実行を防ぐ仕組み。
サブリソース完全性(Subresource Integrity)は 2016 年に W3C 勧告として標準化された仕組みで、script タグや link タグの integrity 属性に、期待するファイルの base64 エンコードされた SHA-256/384/512 ダイジェストを 1 つ以上指定して設定します。ブラウザはリソースを取得したうえでダイジェストを再計算し、指定されたハッシュのいずれとも一致しない場合は実行や適用を拒否します。スペース区切りで複数のハッシュを指定すると、既知の正当な複数バージョンをページで受け入れられます。SRI は正確なバイト列を事前に把握している必要があるため、動的に生成されるアセットではなく、静的でバージョン固定されたアセットを保護します。
SRI は、CDN の侵害や、Magecart ファミリーのような乗っ取られたサードパーティスクリプトに対する、主要なクライアント側の防御策です。Polyfill.io 攻撃はその重要性を示しています。2024 年 2 月に新しい所有者が cdn.polyfill.io ドメインを取得した後、この CDN はモバイルユーザーを詐欺サイトへリダイレクトするペイロードを配信し始めました。これは 2024 年 6 月 25 日に Sansec によって発見され、10 万を超えるサイトに影響しました(CVE-2024-38526 として追跡)。integrity ハッシュを固定していたページであれば、ダイジェストがもはや一致しないため、改ざんされたファイルを直ちにブロックできたはずです。
SRI は CSP や crossorigin 属性と併用して機能し、コードとダイジェストが乖離しないよう、ビルドパイプラインでのバージョン固定とハッシュの自動再生成と組み合わせて使うべきです。
flowchart TD
A["ブラウザが integrity 属性付き<br/>タグを解析"] --> B[CDN からリソースを取得]
B --> C[SHA-256/384/512 ダイジェストを計算]
C --> D{ダイジェストが<br/>指定ハッシュと一致?}
D -->|一致| E[リソースを実行 / 適用]
D -->|不一致 — 改ざんまたは差し替え| F[ブロックしてエラーを発生]● 例
- 01
「<script src="https://cdn.example.com/lib.js" integrity="sha384-..." crossorigin="anonymous"></script>」。
- 02
CSP の「require-sri-for script style」ディレクティブで、すべてのサブリソースに SRI を強制する(対応環境)。
● よくある質問
サブリソース完全性 (SRI) とは何ですか?
サードパーティから読み込んだスクリプトやスタイルシートを実行する前に、ブラウザが暗号学的ハッシュを検証し、改ざんされたファイルの実行を防ぐ仕組み。 サイバーセキュリティの アプリケーションセキュリティ カテゴリに属します。
サブリソース完全性 (SRI) とはどういう意味ですか?
サードパーティから読み込んだスクリプトやスタイルシートを実行する前に、ブラウザが暗号学的ハッシュを検証し、改ざんされたファイルの実行を防ぐ仕組み。
サブリソース完全性 (SRI) からどのように防御しますか?
サブリソース完全性 (SRI) に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
サブリソース完全性 (SRI) の別名は何ですか?
一般的な別名: SRI。