HTML サブリソース整合性によるリソースの整合性チェック
この記事では、HTML サブリソース整合性 (SRI) 機能を使用して、Web サイトがロードする外部リソースの整合性を確保し、悪意のあるコードの挿入攻撃を防ぐ方法について説明します。
1. サブリソース整合性 (SRI) とは?
SRI とは、Web サイトがロードする CSS、JavaScript などの外部リソースの整合性を検証するためのセキュリティメカニズムです。 リソースのハッシュ値を事前に計算し、HTML に埋め込んでおくことで、ブラウザはリソースの取得時にそのハッシュ値と比較し、改ざんされていないかを検証します。
2. SRI の仕組み
SRI は、HTML の <link>
タグや <script>
タグに integrity
属性を追加することで使用します。
integrity
属性: リソースの期待されるハッシュ値を格納します。
ハッシュアルゴリズムには、SHA-256、SHA-384、SHA-512 などがあり、より安全性の高いアルゴリズムを使用することが推奨されます。
使用例
<link rel="stylesheet" href="https://example.com/style.css"
integrity="sha384-oqExTbL1sQwpO+Y59F64/3Vs+sdA7uKYz2k9+IPR9vKNlqvW7H4qlgvp+2Z18g+">
<script src="https://example.com/script.js"
integrity="sha512-h3+yK1rgIzYKni+9u2L/yqy1J1nLF/Z8n2LB+z6XQtS2m2j/V0uyE/LhmGYXlQE="
crossorigin="anonymous"></script>
3. SRI のメリット
- Web サイトのセキュリティ向上: 悪意のあるコードの挿入攻撃を防止します。
- ユーザーエクスペリエンスの向上: リソースの読み込みエラーによる Web サイトの機能異常を回避します。
- Web サイトの信頼性向上: ユーザーの Web サイトに対する信頼感を高めます。
4. SRI の使用方法
4.1. リソースのハッシュ値の生成
オンラインツールやコマンドラインツールを使用して、リソースのハッシュ値を生成できます。
オンラインツール
コマンドラインツール (openssl)
``` openssl dgst -sha384 -binary style.css | openssl base64 -A ```4.2. HTML へのハッシュ値の追加
HTML コードの <link>
タグや <script>
タグに integrity
属性を追加し、生成したハッシュ値を指定します。
4.3. SRI 設定のテスト
Web 開発ツールを使用して、SRI 設定が有効になっているかどうか、リソースの検証が成功しているかどうかを確認できます。
5. ベストプラクティス
- コンテンツ配信ネットワーク (CDN) の SRI サポートを使用する
- すべての重要な外部リソースに SRI を使用する
- 潜在的なセキュリティ上の脅威に対処するために、リソースのハッシュ値を定期的に更新する
6. ブラウザの互換性
SRI は、主要なブラウザの最新バージョンでサポートされています。
ブラウザ | バージョン |
---|---|
Chrome | 45+ |
Firefox | 43+ |
Safari | 10+ |
Edge | 12+ |
SRI をサポートしていないブラウザでは、integrity
属性は無視され、リソースの読み込みには影響しません。
7. まとめ
SRI は、Web サイトのセキュリティを向上させるための重要な機能です。 開発者は、SRI を積極的に使用して、Web サイトの安全性を高めることを推奨します。
関連する Q&A
Q1: SRI を使用すると、Web サイトのパフォーマンスに影響がありますか?
A1: SRI を使用しても、Web サイトのパフォーマンスに大きな影響はありません。 ブラウザは、リソースのダウンロードと並行してハッシュ値の検証を行うため、読み込み時間が大幅に遅くなることはありません。
Q2: SRI は、すべての種類の Web セキュリティ攻撃を防ぐことができますか?
A2: いいえ、SRI は、すべての種類の Web セキュリティ攻撃を防ぐことはできません。 SRI は、リソースの改ざんを防ぐ効果的な手段ですが、クロスサイトスクリプティング (XSS) やクロスサイトリクエストフォージェリ (CSRF) などの他の攻撃を防ぐことはできません。
Q3: SRI を使用する場合、他に注意すべき点はありますか?
A3: SRI を使用する場合、リソースのハッシュ値を定期的に更新することが重要です。 リソースが更新されたにもかかわらず、古いハッシュ値を使用している場合、ブラウザはリソースの読み込みをブロックするため、Web サイトが正しく表示されなくなる可能性があります。