• 分類ガイド
  • 14項目
  • 重要(high) 5
  • 中(medium) 6
  • 低(low) 3

HTML・JavaScriptのセキュリティ診断14項目(Mixed Content・外部スクリプト・SRI・危険なAPI)

HTML・JavaScriptのセキュリティ診断は、Mixed Content、WebSocketの暗号化、外部スクリプトの数と配信元、SRI、危険なJavaScript API、iframeのsandboxなどを14項目で確かめます。各項目の意味と直す順番をまとめました。

結論(HTML・JavaScriptのセキュリティ)

HTML・JavaScriptのセキュリティ診断では、HTTPSのページがhttp://のリソースやws://を読み込んでいないか、廃止されたFlash等を使っていないか、外部JavaScriptの数・配信元・SRIが管理されているか、innerHTMLやevalなど危険なAPIやインラインイベントが残っていないかを確かめます。最初に確認するのは重要(high)の5項目です。

HTML・JavaScript・外部資産の診断項目一覧(14項目)

Mixed Content、外部スクリプト、SRI、危険なJavaScript、秘密情報の埋め込みなどを確認します。各項目名から、意味・診断基準・リスク・具体的な対策を解説したページへ移動できます。

No.診断項目重大度概要
40Mixed ContentがないhighMixed Contentがない状態とは、HTTPSページがhttp://のスクリプトや画像を読み込んでいないことです。
41WebSocketをWSSで暗号化highWebSocketをWSSで暗号化するとは、ws://ではなくTLSで保護されたwss://だけで接続することです。
42廃止されたクライアント技術を使用していないhigh廃止されたクライアント技術を使用していないかは、Flash・Silverlight・ActiveX・Javaアプレットの記述がHTMLに残っていないかで確認します。
43postMessageの送受信元を限定highpostMessageの送受信元を限定するとは、送信時にtargetOriginを具体的なオリジンに固定し、受信時にevent.originを完全一致で検証することです。
44外部JavaScript依存数medium外部JavaScript依存数とは、ページが別オリジンから読み込むscriptの件数です。
45外部JavaScriptのSRImedium外部JavaScriptのSRIとは、script要素のintegrity属性にハッシュ値を書き、改ざんされたファイルの実行をブラウザに拒否させる仕組みです。
46外部スクリプト配信元を限定medium外部スクリプト配信元を限定するとは、JavaScriptを読み込む外部ホストの種類を必要最小限に絞ることです。
47外部CSSのSRIlow外部CSSのSRIとは、link rel="stylesheet" にintegrity属性でハッシュ値を書き、改ざんされたCSSを適用させない仕組みです。
48別タブリンクのnoopenermedium別タブリンクのnoopenerとは、target="_blank"のリンクにrel="noopener"を付け、開いた先からwindow.openerで元のタブを操作させない対策…
49危険なJavaScript APIの兆候high危険なJavaScript APIの兆候とは、innerHTMLへの代入やeval()などDOMベースXSSの原因になるシンクの記述です。
50危険なインラインイベントを抑制medium危険なインラインイベントを抑制するとは、onclick等のイベント属性をaddEventListenerへ移し、unsafe-inlineなしの厳格なCSPを適用できる状態にする…
51外部iframeのsandboxmedium外部iframeのsandboxとは、YouTubeや地図など外部の埋め込みにsandbox属性を付け、スクリプト・フォーム・ポップアップ・最上位遷移を既定で禁止する設定です。
52Service Workerの利用を把握lowService Workerの利用を把握するとは、登録スクリプト・スコープ・キャッシュ方針・解除手順を運用者が管理することです。
53Web App Manifestの公開lowWeb App Manifestの公開とは、PWAの名前・アイコン・起動URLなどを書いたJSONを誰でも取得できる形で置くことです。

HTML・JavaScriptのセキュリティ診断とは

HTML・JavaScriptのセキュリティ診断は、ページのHTMLに書かれた読み込み先やスクリプトの書き方から、改ざんや情報漏えい、XSS(クロスサイトスクリプティング)につながる兆候がないかを確かめるものです。セキュリティ診断127項目のうち、HTML・JavaScript・外部資産に関する14項目がこの分類に入ります。

Webページは、自サイトのHTMLだけでなく、CDNや外部サービスから読み込むJavaScript・CSS・iframeなど多くの部品でできています。外部から読み込んだJavaScriptは自サイトのスクリプトと同じ権限で動き、ページのDOMやフォーム入力、HttpOnlyでないCookieにアクセスできます。そのため、どこから何を読み込んでいるか、改ざんされたときに検知できるかが、サイト全体の安全性を左右します。

もう1つの観点は、ページ内のスクリプトの書き方です。innerHTMLへの代入や eval() のように、文字列をHTMLやコードとして解釈するAPIに信頼できない値が流れ込むと、DOMベースXSSが起きます。onclick などのインラインイベントが残っていると、厳格なCSPを導入できず、XSSが起きたときに被害を抑えられません。

この分類の各項目は、主にトップページのHTML(インラインスクリプトを含む)を文字列として解析する静的な確認です。script src で読み込む外部JavaScriptの中身や、タグマネージャーが実行時に追加するスクリプト、JavaScriptで後から生成されるiframeは解析していません。そのため、記述があるだけで脆弱性と断定できない項目は△(要確認)とし、○であっても外部ファイルや下層ページは別途確認が必要です。

14項目の全体像(4つのグループ)

この分類の14項目は、大きく4つのグループに分けて考えると整理しやすくなります。

グループ診断項目確認する内容
通信と廃止技術「Mixed Contentがない」、「WebSocketをWSSで暗号化」、「廃止されたクライアント技術を使用していない」HTTPSのページがhttp://のリソースを読み込んでいないか、WebSocketが wss:// か、Flash・Silverlight・ActiveX・Javaアプレットが残っていないか
外部スクリプト・CSSの管理「外部JavaScript依存数」、「外部スクリプト配信元を限定」、「外部JavaScriptのSRI」、「外部CSSのSRI」外部スクリプトの件数(5件以下で○)と配信元ホスト数(4ホスト以下で○)、integrity属性による改ざん検知があるか
危険なスクリプトの書き方「危険なJavaScript APIの兆候」、「危険なインラインイベントを抑制」、「postMessageの送受信元を限定」innerHTML・eval() などのシンク、onclick などのイベント属性、postMessage の宛先と受信元の検証
他のウィンドウ・ブラウザ機能「別タブリンクのnoopener」、「外部iframeのsandbox」、「Service Workerの利用を把握」、「Web App Manifestの公開」別タブで開いた先から元ページを操作されないか、外部iframeの権限を絞っているか、Service Workerとマニフェストの内容を把握しているか

外部スクリプトの3項目は、似ていても数えるものが違います。「外部JavaScript依存数」はスクリプトの件数を、「外部スクリプト配信元を限定」は配信元ホスト名の種類数を、「外部JavaScriptのSRI」は改ざん検知の有無を評価します。5件・4ホストという基準は、標準規格の数値ではなく運用上の目安です。

優先して確認すべき項目

この分類には最重要(critical)の項目はありませんが、重要(high)の5項目は、通信の盗聴・改ざんやXSSに直結するため最初に確認します。

  1. Mixed Contentがない:HTTPSのページがスクリプトやCSSをhttp://で読み込むと、経路上で差し替えられてページ全体を制御されるおそれがあります。現在のブラウザはスクリプトやiframeの混在をブロックするため、表示不具合の原因にもなります。HTTP参照があれば×、CSPの upgrade-insecure-requests があれば△です。
  2. WebSocketをWSSで暗号化:ws:// は暗号化もサーバー証明書の検証もなく、トップページのHTMLに平文の ws:// 参照が1件でもあれば×です。
  3. 廃止されたクライアント技術を使用していない:Adobe Flash Playerは2020年12月31日、Microsoft Silverlightは2021年10月12日にサポートが終了しています。applet要素や .swf・.xap の参照があれば×です。
  4. 危険なJavaScript APIの兆候:innerHTML・outerHTMLへの代入、insertAdjacentHTML()、document.write()、eval()、new Function()、文字列を渡した setTimeout()・setInterval() が対象です。記述だけでは確定しないため△とし、コードレビューを促します。
  5. postMessageの送受信元を限定:送信時の targetOrigin に "*" を使わず、受信時は event.origin を許可リストと完全一致で比較します。兆候があれば△です。

次に「中(medium)」の項目として、外部スクリプトの件数・配信元・SRI、別タブリンクのnoopener、インラインイベント、外部iframeのsandboxを整えます。外部CSSのSRI、Service Worker、Web App Manifest(低)は、管理状況の棚卸しとして最後に確認します。

直すときの進め方と注意点

HTMLやJavaScriptの修正は、外部サービスの動作や画面の表示に影響しやすいため、次の順で進めると安全です。

  • 外部依存の台帳を作る:トップページだけでなく、タグマネージャーの管理画面やブラウザの開発者ツールのネットワークタブも使い、外部スクリプトの配信元・目的・契約・担当を一覧にします。利用を終えたサービスのタグは、HTMLとタグマネージャーの両方から削除します。
  • HTTPの参照をHTTPSに直す:根本対策はHTML内のURLを https:// やルート相対に直すことです。upgrade-insecure-requests は移行期間の補助策にとどめます。
  • 版を固定したライブラリにSRIを付けるか、自己ホストする:integrity には SHA-256・SHA-384・SHA-512 のハッシュを書き、別オリジンでは crossorigin="anonymous" と配信元のCORSが必要です。内容が随時変わる解析タグなどには付けられないため、CSPでの配信元限定などで補います。自己ホストにした場合は、ライブラリの脆弱性情報の確認と更新が自組織の責任になります。
  • 危険なAPIを安全な代替に置き換える:textContent、insertAdjacentText()、JSON.parse()、関数を渡す setTimeout() に書き換えます。インラインイベントは addEventListener() とイベント委譲に移し、CSPの script-src-attr 'none' をReport-Onlyで試して残りを洗い出します。
  • iframeとリンクの権限を絞る:外部iframeには sandbox を付け、必要な allow-* だけを戻します。埋め込み事業者ごとに必要な権限が異なるため、必ず実機で確認します。target="_blank" のリンクには rel="noopener" を明示します。
  • Service Workerとマニフェストは内容を把握する:スコープとキャッシュ方針、緊急時の解除手順を文書化し、マニフェストに検証環境のURLや利用者を識別する値が残っていないか確認します。

自治体・公共機関のサイトで特に注意すること

自治体や公共機関のサイトには、アクセス解析、翻訳・読み上げなどのアクセシビリティ支援、地図、チャットボット、動画、予約システムなど、外部サービスの部品が多く組み込まれます。よくある注意点として、次のようなものがあります。

  • 委託先や部署ごとにタグが追加され、誰も全体を把握していない。契約が終わったサービスのタグが残り、失効したドメインを第三者に取得される余地が生まれる。
  • 議会中継や観光ガイドで使っていたFlash・Silverlightの参照が、古いページやリンクに残っている。
  • CMSのテンプレートに古い http:// の画像や旧ライブラリの読み込み、onclick 属性が残り、HTTPS化やCSPの導入を妨げている。
  • ベンダー製のチャットボットや地図の外部JavaScriptは診断では中身が見えないため、導入時に送信先オリジンの固定や受信データの扱いを仕様書や回答書で確認する必要がある。

外部依存の台帳を年度ごとに見直し、新しいタグを追加するときの承認手順を決めておくと、こうした問題を防ぎやすくなります。

よくある質問(FAQ)

HTML・JavaScriptのセキュリティ診断項目は、どの順番で直せばよいですか?

まず重要(high)の項目として、Mixed Content、WebSocketの暗号化(wss://)、廃止されたクライアント技術、postMessageの送受信元の限定、危険なJavaScript APIの兆候を確認します。次に外部JavaScriptの件数・配信元・SRI、別タブリンクのnoopener、インラインイベント、外部iframeのsandbox(中)を整え、最後に外部CSSのSRI、Service Worker、Web App Manifest(低)を確認します。

HTML・JavaScriptのセキュリティ診断では、外部の.jsファイルの中身も調べますか?

調べません。この分類の各項目は、主にトップページのHTML(インラインスクリプトを含む)を対象にしており、script src で読み込む外部JavaScriptの中身や、実行時にタグマネージャーなどが追加するスクリプトは解析していません。○の結果でも、外部ファイルはコードレビューで確認してください。

HTML・JavaScriptのセキュリティ診断で△が出たら、脆弱性があるということですか?

確定ではありません。危険なJavaScript APIの兆候やインラインイベント、SRIの欠落などは、記述があるだけでは脆弱性と断定できないため△(要確認)としています。△は、入力値が流れ込んでいないか、外部依存を管理できているかをレビューすべき箇所があるという意味です。

HTML・JavaScriptのセキュリティで、Googleアナリティクスやタグマネージャーにも SRI を付けるべきですか?

提供元が随時更新する動的スクリプトには、通常SRIを付けられません。台帳管理、CSPでの配信元の限定、不要なタグの削除、iframe化などで補います。SRIは版を固定したライブラリに使います。

HTML・JavaScriptのセキュリティ対策で、使わなくなった外部サービスのタグを残すと何が起きますか?

サービス終了後にドメインが失効し、第三者に再取得されると、そのドメインから任意のスクリプトを配信できるようになります。契約終了と同時に、HTMLとタグマネージャーの両方からタグを削除してください。

HTML・JavaScriptのセキュリティ診断14項目はまとめて確認できますか?

セキュリティAIチェッカーにURLを入力すると、この14項目を含む127項目を公開情報から自動で診断し、項目ごとの判定と改善の優先順位を表示します。