結論(HTMLの基本設定)
HTMLの基本設定の診断では、すべてのテキスト応答にContent-Typeと文字コードが明示されているか、ページタイトルとhtml要素のlang属性があるか、canonicalがHTTPSのURLを指しているか、初期HTMLが1,000,000バイトを超えていないかを確かめます。最初に確認するのは、文字コード誤認によるXSSにも関わるContent-Typeの2項目です。
HTMLの基本衛生の診断項目一覧(7項目)
文字コード、言語指定、タイトル、canonicalなど、表示と検索の土台になる設定を確認します。各項目名から、意味・診断基準・リスク・具体的な対策を解説したページへ移動できます。
| No. | 診断項目 | 重大度 | 概要 |
|---|---|---|---|
| 32 | 過大な初期HTMLを配信していない | low | 過大な初期HTMLを配信していないとは、最初に受け取るHTML文書が1MB以下に収まっている状態です。 |
| 34 | Content-Typeが明示されている | medium | Content-Typeが明示されているとは、応答ヘッダーでMIMEタイプとcharsetを宣言している状態です。 |
| 54 | ページタイトルが設定されている | low | ページタイトルが設定されているとは、head内に空でないtitle要素があることです。 |
| 55 | 文字コードが明示されている | low | 文字コードが明示されているとは、Content-Typeヘッダーのcharsetやmeta charsetでUTF-8を宣言していることです。 |
| 56 | html要素に言語が設定されている | low | html要素に言語が設定されているとは、html lang="ja" のようにページの主な言語をlang属性で宣言していることです。 |
| 57 | canonicalが安全なURLを指している | medium | canonicalが安全なURLを指しているかは、rel=canonicalのhrefがhttps:のURLかで決まります。 |
| 121 | Content-Typeと文字コードを全テキスト応答へ明示 | medium | Content-Typeと文字コードを全テキスト応答へ明示する対策を解説。 |
HTMLの基本設定の診断とは
HTMLの基本設定の診断は、文字コード、本文の種類、ページタイトル、言語、正規URL、HTMLの大きさといった、表示と検索の土台になる設定が整っているかを確かめるものです。セキュリティ診断127項目のうち、HTMLの基本衛生に関する7項目がこの分類に入ります。
これらは一見、セキュリティよりも表示品質やSEOの話に見えます。しかし、文字コードや本文の種類(MIMEタイプ)が明示されていないと、ブラウザが内容から推測して解釈します。サーバー側のエスケープとブラウザの文字の解釈がずれると、エスケープしたはずの引用符が属性値を閉じる文字として働き、XSSにつながることがあります。2024年には、charset指定の無い応答をISO-2022-JPとして解釈させてXSSにつなげる手法も公表されています。
正規URLを示す canonical がhttp://を指していると、検索エンジンやSNSがHTTP版を「正」と扱い、住民を暗号化されていない入口へ誘導するおそれがあります。ページタイトルとhtml要素の lang 属性は、ブラウザのタブや検索結果、スクリーンリーダーの読み上げに使われ、WCAG 2.2のレベルAの達成基準でも求められています。
この分類の項目は重大度が中(medium)か低(low)で、単独で深刻な被害につながるものではありません。ただし、どれも設定を直すだけで改善でき、ほかのセキュリティ対策の前提にもなるため、早めに整えておきたい項目です。
7項目の全体像(3つのグループ)
この分類の7項目は、大きく3つのグループに分けて考えると整理しやすくなります。
| グループ | 診断項目 | 確認する内容 |
|---|---|---|
| 本文の種類と文字コード | 「Content-Typeが明示されている」、「Content-Typeと文字コードを全テキスト応答へ明示」、「文字コードが明示されている」 | トップページの応答にMIMEタイプとcharsetがあるか、下層ページを含むすべてのテキスト応答にcharsetがあるか、ページの文字コードがUTF-8と宣言されているか |
| ページの名前と言語 | 「ページタイトルが設定されている」、「html要素に言語が設定されている」 | 空でない title 要素があるか、html要素に lang="ja" のような形式の正しい言語タグがあるか |
| 正規URLと文書の大きさ | 「canonicalが安全なURLを指している」、「過大な初期HTMLを配信していない」 | canonical がHTTPSのURLを指しているか、最初に受け取るHTMLが1,000,000バイト以下か |
文字コードの3項目は、見る範囲と厳しさが異なります。「文字コードが明示されている」はトップページでHTTPヘッダーかmetaのどちらかにUTF-8があれば○です。「Content-Typeが明示されている」はトップページの応答ヘッダーを見て、テキスト系なのにcharsetが無い場合やContent-Type自体が無い場合を△とします。「Content-Typeと文字コードを全テキスト応答へ明示」はトップページと下層ページ(最大3ページ)を確認し、1ページでも欠落があれば×となる網羅性の項目で、重みは3です。
優先して確認すべき項目
この分類で最初に確認したいのは、XSSの根本的な対策にも関わる文字コードとContent-Typeの項目です。
- Content-Typeと文字コードを全テキスト応答へ明示:トップページは正しくても、下層の旧来の静的HTMLや別アプリ、PHPの独自出力でcharsetが漏れていることがよくあります。1ページでも欠落があれば×です。なお application/json にはcharsetパラメータが定義されておらず、画像・PDFなどのバイナリにも文字コードの指定は不要です。
- Content-Typeが明示されている:OWASP ASVS 5.0.0 V4.1.1とIPA「安全なウェブサイトの作り方」がヘッダーでの明示を求めています。X-Content-Type-Options: nosniff は宣言されたタイプを尊重させる指示なので、Content-Typeとそろって初めて意味を持ちます。
- canonicalが安全なURLを指している:http:// を指すのは、CMSのサイトURL設定やテンプレートに旧URLが残った、HTTPS移行の不完全さの兆候です。HTTPS以外なら×、canonicalが無ければ対象外です。
次に低(low)の項目として、ページタイトル、文字コード、html要素の言語、初期HTMLの大きさを整えます。ページタイトルが無い・空、langが無い・空・形式誤り、UTF-8以外や宣言なし、初期HTMLが1,000,000バイト超はいずれも△です。初期HTMLの大きさは脆弱性そのものではなく、災害時などアクセスが集中する場面のつながりやすさや、Googlebotが読む先頭2MBに関わる補助指標です。
直すときの進め方と注意点
基本設定の修正は簡単に見えますが、文字コードを誤って宣言すると全ページが文字化けします。次の順で進めると安全です。
- 実際の文字コードを棚卸しする:設定を変える前に、各ページのファイルがUTF-8かShift_JISかを確認します。実体と違う値を宣言すると、ヘッダーのcharsetがmetaより優先されるため全面的に文字化けします。
- ヘッダーとmetaの値をそろえる:Content-Type の charset と meta charset の両方を指定するなら同じ値にします。meta charset は文書の最初の1024バイト以内に置きます。
- Shift_JISからUTF-8へ移す場合は一度に切り替える:ファイルの変換とヘッダー・metaの切り替えを同時に行わないと、全ページが文字化けします。
- title と lang を目視でも確認する:診断は中身の有無や形式だけを見るため、「Untitled Document」のような初期値のタイトルや、lang="jp" のような誤った値も形式上は○になります。日本語ページは lang="ja" とし、タイトルは「ページ名|分類名|○○市」のように固有の情報を先頭に置きます。
- canonical はHTTPSの絶対URLで書く:CMSのサイトURL設定を直し、HTTPからHTTPSへの301リダイレクトとHSTSも組み合わせます。canonical は検索エンジンへのヒントにすぎず、HTTP版へのアクセスはサーバー側の転送で統一します。
- 初期HTMLの肥大化の原因を取り除く:Base64で埋め込んだ画像、全件データの埋め込み、肥大化したインラインCSS・JS、コメントアウトされた旧デザインなどを見直します。圧縮は転送量を減らしますが判定は変わらないため、HTML自体の削減が本質的な対策です。
自治体・公共機関のサイトで特に注意すること
自治体や公共機関のサイトは、長年にわたって増築されてきたため、基本設定のばらつきが起きやすい傾向があります。よくある注意点として、次のようなものがあります。
- CMSで作った新しいページはUTF-8でも、下層に残る旧来の静的HTMLディレクトリがShift_JISのままで、サーバーのcharset設定と食い違っている。
- 公的機関はJIS X 8341-3:2016の適合レベルAAへの準拠が目標で、ページタイトル(達成基準2.4.2)と言語の指定(達成基準3.1.1)はその前提条件になる。
- 「テストページ」「(仮)」などの作業用タイトルが、検証ページの誤公開の兆候として見つかることがある。
- 外国語版ページの lang がその言語になっていない、やさしい日本語のページで言語指定とふりがなを混同している。
ページの量が多いサイトほど、トップページだけでなく下層ページの応答ヘッダーとHTMLの冒頭を定期的に点検すると、こうした不備を防ぎやすくなります。
よくある質問(FAQ)
HTMLの基本設定の診断項目は、どの順番で直せばよいですか?
まず中(medium)の項目として、Content-Typeと文字コードを全テキスト応答へ明示すること、トップページのContent-Typeの明示、canonicalがHTTPSのURLを指していることを確認します。次にページタイトル、文字コード、html要素の言語、初期HTMLの大きさ(低)を整えます。
HTMLの基本設定はセキュリティと関係があるのですか?
関係があります。Content-Typeや文字コードの明示が無いとブラウザが推測し、サーバーのエスケープとブラウザの解釈がずれることでXSSの原因になり得ます。canonicalがhttp://を指していると、住民を暗号化されていない入口へ誘導するおそれがあります。titleやlangはアクセシビリティの要件でもあります。
HTMLの基本設定で、meta charset を書いていればContent-Typeヘッダーのcharsetは不要ですか?
不要ではありません。OWASP ASVS V4.1.1やIPA「安全なウェブサイトの作り方」はHTTPヘッダーでの指定を求めています。ヘッダーのcharsetはmetaより優先されるため、両方を指定するなら値を一致させます。
HTMLの基本設定で、Shift_JISのサイトはどう判定されますか?
全テキスト応答の項目はcharsetの有無だけを判定するため、Shift_JISでも明示されていれば問題ありません。一方、トップページの文字コードの項目はUTF-8なら○、UTF-8以外や宣言なしは△です。移行する場合は、ファイルの変換とヘッダー・metaの切り替えを同時に行わないと全ページが文字化けします。
HTMLの基本設定の7項目はまとめて確認できますか?
セキュリティAIチェッカーにURLを入力すると、この7項目を含む127項目を公開情報から自動で診断し、項目ごとの判定と改善の優先順位を表示します。