サードパーティスクリプト&SRI監査
あなたのページが読み込むサードパーティスクリプトはすべて、ページの全権限で実行されます — DOMを読め、フォーム入力を監視でき、訪問者のセッション内で行動できます。この監査はページの静的HTMLを取得し、参照するすべての外部スクリプトを一覧にし、どれがサードパーティか、どれがSubresource Integrity(SRI)ハッシュを持つか、どれが正確なバージョンに固定されているかを印付けます — そして完全性が不足するサードパーティスクリプトについては、タグにそのまま貼れるようsha384ハッシュを計算します。
最終更新:
あなたのサイト上のベンダースクリプトが変更されたり落ちたりしないか心配ですか?myeventwatchで無料監視 — 有効期限とダウンタイムのアラート、カード不要。
この監査が確認すること — そして見えないもの
チェッカーはページを一度取得し、配信されたHTML — 静的HTMLのみ — を解析します。そのマークアップ内のすべての <script src> はホストとともに一覧化され、ホストがあなたのページの登録可能ドメインと一致すればファーストパーティ、そうでなければサードパーティに分類され、ブラウザがあなたを守れるかどうかを決める2つの属性が確認されます:integrity、つまりブラウザがファイル実行前に検証するSRIハッシュと、crossorigin、つまりクロスオリジンSRIチェックが機能するために必要な属性です。URL内のバージョンも評価されます:[email protected] や /v2.4/ とアドレスされたスクリプトは固定済みですが、latest やバージョンなしのアドレスは、誰もあなたのサイトに触れなくてもいつでも内容が変わりうる動く的です。
境界をはっきりさせてください。重要だからです:v1はページの静的HTMLのみを解析します — JavaScriptが実行時に注入するスクリプトは対象外です。タグマネージャー、同意ツール、チャットウィジェットは、ページ読み込み後にコードからscript要素を作るのが普通で、静的解析はそれらを決して見ません。この監査を、あなたのテンプレートとCMSが直接参照するものの目録 — 通常は問題の中で最大かつ最も修正可能な部分 — として扱い、タグマネージャーのコンテナはマネージャー自身のプレビューと変更履歴で別途監査してください。インラインスクリプト(src のないブロック)は、SRIをまったく持てないため、結果に事実として数えられます。対処法はコンパニオンガイドが説明します。
ハッシュ列:計算されたもので、決して推測ではない
integrity 属性が不足するサードパーティスクリプトについては、チェッカーがスクリプト自体を取得します — このサイトの他のすべてのチェッカーと同じSSRF防御済み取得経路を通し、対象は最初の15件、各512 KBまで — そしてそのSHA-384ハッシュを計算します。取得が成功すると、SRIセルには完全なスニペット integrity="sha384-…" が表示され、crossorigin="anonymous" と並べてタグに貼れる状態になります。ハッシュが表示されるのは、スクリプトが実際に取得された場合のみです。取得に失敗した、ファイルが大きすぎた、あるいはスクリプトが15件の上限を超えた場合、セルにはその注記が代わりに表示されます — プレースホルダや推測値が表示されることは決してありません — 修正方法は、正確なファイルが手元にあるあなた自身のビルドパイプラインでハッシュを生成することです。
関連チェック:セキュリティヘッダーチェックはレスポンスヘッダーを採点します — SRIの自然なパートナーであるContent-Security-Policyを含みます —、SSLグレーダーはそれらのスクリプトが到達する伝送路をカバーし、コンパニオン記事サードパーティスクリプトはサプライチェーンリスクは実際のインシデント、SRIが止めるものと止めないもの、繰り返せる監査ルーチンを辿ります。
判定の読み方:完全性がありバージョンが固定されたサードパーティスクリプトが健全なケースです — ブラウザは差し替えられたファイルや編集されたファイルを拒否します。完全性のないサードパーティスクリプトは自動的に悪意があるわけではありません。保護されていないということで、その内容はホストが今日配信するものが何であれそれであり、変更への唯一の警告は被害そのものになるでしょう。固定されていないアドレスは、欠けたハッシュと同じ疑いを受けるべきです。latest URL上のSRIハッシュはベンダーが最初に更新を出荷した時点で壊れるからです — だからこそ2つの所見は並べて報告され、恒久的な修正は常に対です:まず正確なバージョンを固定し、次にまさにそのファイルのハッシュを取ること。
このページが示す事実
| サードパーティ | ホストの登録可能ドメインがページのものと異なるスクリプト — 他者が配信し、あなたのページの権限で実行されるコード。 |
| 完全性(SRI) | タグがintegrity属性を持つかどうか:ブラウザがファイル実行前に照合する暗号ハッシュで、不一致があれば一切実行を拒否します。 |
| Crossorigin | タグがクロスオリジンSRIチェックに必要なcrossorigin属性を持つかどうか。これがなければブラウザは読み込みにSRIを適用できません。 |
| 固定済み | URLが正確なバージョン([email protected]、/v2.4/)を名指すかどうか。内容が黙って変わりうる浮動したlatestやバージョンなしのアドレスではありません。 |
| 計算されたSRI | 完全性が不足するサードパーティスクリプトについて、チェッカーが実際にファイルを取得して計算したsha384ハッシュ — 取得成功時のみ、対象の最初の15件について表示されます。 |
よくある質問
この監査は私のページが実行するすべてのスクリプトを見ますか?
いいえ — そしてページはそれをはっきり述べています:v1はページの静的HTMLのみを解析するため、JavaScriptが実行時に注入するスクリプトは対象外です。タグマネージャー、A/Bテストツール、同意バナー、チャットウィジェットは通常、読み込み後にスクリプトを注入します。それらはタグマネージャー内、またはブラウザのネットワークパネルで監査してください。この監査が完全にカバーするのは、配信されたHTMLが直接参照するすべてのスクリプトです — ライブラリ、CDNウィジェット、監視用埋め込みはそこに住んでいます。
SRI列のハッシュはどこから来ますか?
チェッカーがスクリプトファイル自体を取得し、そのSHA-384ハッシュを計算します。対象はintegrity属性が不足するサードパーティスクリプトで、最初の15件、各512 KBまでです。ハッシュが表示されるのはスクリプトが実際に取得された場合のみです:取得に失敗した、ファイルが大きすぎた、上限に達した場合は、セルの表示はハッシュではなくその注記になります。スニペットをcrossorigin="anonymous"とともにscriptタグに貼り、バージョン変更のたびに監査を再実行してください — 新しいバージョンは新しいハッシュを意味します。
タグマネージャーのスクリプトには固定ハッシュを持てません。どうすれば?
その通りです — タグマネージャーのコンテナは変わるように設計されているため、SRIで固定できません。変化するコードを読み込むこと自体が目的のスクリプトも同様です。それらについては統制の手段が別です:コンテナに公開できる人を制限し、その変更履歴をコード変更のようにレビューし、必要なページでのみ読み込み、Content-Security-Policyを使って注入スクリプトにできることとデータの送信先を制限します。SRIは固定されたライブラリを守り、ガバナンスは動的なものを守ります。
integrity属性の欠如は緊急事態ですか?
それは常在する露出であって、インシデントではありません。そのスクリプトはほぼ間違いなくベンダーが今日配信するつもりのファイルです。問題は、明日 — ベンダーの侵害、アカウントの乗っ取り、ドメインの失効の後に — 別のファイルが来ても何も止めも印付けもしないことです。修正順序:ログイン、支払い、個人データのあるページのスクリプトを最初に、次にその他のすべての場所で固定+ハッシュ済みライブラリを、最後にロングテールを。バージョンが固定されれば、各修正はタグの1行変更です。
固定列がスクリプトを「latest」や「バージョンなし」と呼ぶのはなぜですか?
固定の判定はURLのヒューリスティックな読み取りです:@1.2.3 や /v2.4/ のようなバージョンらしいセグメントは固定済みと数え、明示的なlatestセグメントは浮動と数え、どこにもバージョンのないURLはバージョンなしと数えます。ヒューリスティックとラベルされるのは、リリース方式を知っているのはベンダーだけだからです — しかしセキュリティ上の要点はラベルに依存しません:そのURLのバイトがURLは変わらずに変わりうるなら、SRIハッシュは存続できません。だからまず固定し、次にハッシュを取ってください。