HTML サニタイジング(エスケープ)対策

サニタイジング(エスケープ)とは?HTML特殊文字を無害化しない事による脅威と対策のまとめ

もし、あなたのサイトに入力フォーム等、訪問者が自由にコンテンツを入力できる箇所がある場合、必ず「html特殊文字のサニタイジング(エスケープ)対策」をしておかなければなりません。

もし、この対策をしていなかった場合、非常に重大な脆弱性が存在する事になり、ハッキングで代表的な「クロスサイトスクリプティング(XSS)」に対して、無防備な状態となります。

これは、非常に危険な状態であり、あなたのサイトに対して、第三者によるスクリプトの埋め込みや、「訪問者の個人情報」の取得を目的としたソース(HTML等)を埋め込まれてしまう危険性が有ります。

なので、Webサイトを運営している方は、必ず「サニタイジング(エスケープ)対策」をしておかなければなりません。

今回の記事では、「サニタイジング(エスケープ)」とは、何なのか、、、だったり、「サニタイジング(エスケープ)対策」をしていない事による脅威。また、対策手順についても解説してきます。

以下、目次になります。

  • サニタイジング(エスケープ)とは
  • サニタイジング(エスケープ)対策をしていない事による脅威
  • サニタイジング(エスケープ)対策をしてみる

サニタイジング(エスケープ)とは

サニタイジング(エスケープ)とは

IT用語で、「サニタイジング」とは、HTMLの特殊文字を、別の文字列へ置き換える事を指します。
「エスケープ」も、「サニタイジング」と同じ意味で用いられます。

なぜ、サニタイジング(エスケープ)が、クロスサイトスクリプティング(XSS)に対して有効なのかは、クロスサイトスクリプティング(XSS)が、HTMLの特殊文字を用いたハッキング手法だからです。

「HTMLの特殊文字」を、別の文字列へ置き換える事で、特殊文字の性質を無効化し(ただの文字列として認識させる)、クロスサイトスクリプティング(XSS)ができなくなります。

例えば、「HTMLの特殊文字」に該当するのが、「<」や「>」といった文字です。これらをwebサイトに設定して、どのようにブラウザ上で表示されるかを確認してみます。

以下の文字列(「<」や「>」を含んでいる)を、Webサイトのコンテンツとして設定します。

<strong>HTMLの特殊文字列</strong>

HTMLを触った事がある方なら、基本的な事ですが、全くHTMLに関して知識のない方は、上記の文字列をコンテンツとして設定したら、ブラウザ上で表示しても、『<strong>HTMLの特殊文字列</strong>』となると想像するでしょう。

ですが、上記文字列を表示させてみると、下記のような結果になります。

HTMLの特殊文字列

文字が強調表示されてるのが分かりますよね!

これが、HTMLの特殊文字の効果です。

「<」や「>」は、特殊文字として機能し、ブラウザは、「<」と「>」で挟まれた部分を「タグ」として認識します。

上記例でいうと、「<」と「>」で挟まれた文字列は「strong」なので、ブラウザはこれを「文字の強調表示タグ」として認識します。

なので、上記では文字が強調表示されてる訳ですね。

サニタイジング(エスケープ)では、このような「特殊文字としての機能」を完全に無効化するのです。

下記に、サニタイジング(エスケープ)を使用した例を示します。

<strong>HTMLの特殊文字列</strong>

上記を、サイトのコンテンツとして設定します。

そして、サニタイジング(エスケープ)をした上で、ブラウザで表示してみましょう。

&lt;strong&gt;HTMLの特殊文字列&lt;/strong&gt;

上記のように、サニタイジング(エスケープ)をすると、特殊文字(「<」と「>」)が、別の文字列へ変更されているのが分かります(赤文字は解説上分かりやすくしたためであり、本来は色の変更はありません)

これが、サニタイジング(エスケープ)の仕組みなのです。

サニタイジング(エスケープ)対策をしていない事による脅威

サニタイジング(エスケープ) 未対策 脅威

上記の解説で、HTMLの特殊文字の機能(効果)や、サニタイジング(エスケープ)の仕組みを理解できたと思います。

間違ってほしくないのは、「HTMLの特殊文字を使える事」が悪いわけではありません。
むしろ、Webサイトの管理者やコンテンツ作成者であれば、必ず使用しなければなりません。

重要なのは、Webサイトにやってきた第三者が「HTMLの特殊文字を使える事」が重大な脅威につながるのです。

なので、そもそも第三者が、”何かしら文字列を入力できるフォーム”がサイト上に無ければ、気にする必要はありません。

ですが、大概のサイトは、ログインフォームだったり、コメント欄だったり、個人情報の入力欄だったりを用意しています。

それらは、第三者が自由に文字列を入力できますよね。

要は、この部分に「サニタイジング(エスケープ)対策」が必要である。ということです。

では、「サニタイジング(エスケープ)対策」をしていないと、どのような脅威が存在するのか。
一般的な脅威は、下記二例になるかと思います。

  • 訪問者のクッキー情報を抜き取るスクリプトを埋め込む事による「セッションハイジャック」
  • 訪問者の個人情報の入力を促す入力フォーム(HTMLタグ)を埋め込むことによる、個人情報の不正搾取

上記は、どちらも「クロスサイトスクリプティング(XSS)」による脅威になります。

「クロスサイトスクリプティング(XSS)」や、上記二例の具体的な仕組み(スクリプトの内容も記述済み)については、こちらで解説しています→【クロスサイトスクリプティング(XSS)とは?仕組み・脅威から対策についてのまとめ】

サニタイジング(エスケープ)対策をしてみる

サニタイジング(エスケープ)対策

上述している通り、サニタイジング(エスケープ)対策とは、HTMLの特殊文字を、別の文字列(無害)へ置き換える事を指します。

ここでは、具体的にその方法を解説しています。

まず、前提として「サーバーサイドのプログラム言語(PHP、Perl、Ruby等)」を使える事が必要です。
プログラムと言うと、非常に難しい印象を持ちますが、サイトの管理者であれば、ある程度の知識は持っておいた方が良いでしょう。

※今回の解説では、PHPでの対策手順を解説していきます。

サーバーサイドの言語(PHP)が利用できる環境であれば、対策は非常に簡単です。

ユーザーが、入力フォームへ入力した文字列を、下記関数に通せば済みます。

htmlspecialchars($str, ENT_QUOTES, ‘UTF-8′);

PHPに用意されている「htmlspecialchars」という関数が、文字列をサニタイジング(エスケープ)してくれる関数になります。
三つの引数($str, ENT_QUOTES, ‘UTF-8′)が、設定でき、一つ目の「$str」の部分に、ユーザーが入力した文字列を設定します。
あとは、サニタイジングする際のルール(「ENT_QUOTES」の部分)や、サニタイジングされた文字列の文字コード(‘UTF-8′)を指定できます。

以上です。
PHPに用意されている関数を使うだけなので、PHPさえ使えれば、非常に簡単に「サニタイジング(エスケープ)」することができます。

まとめ

今回の記事では、「サニタイジング(エスケープ)」の仕組みや、「サニタイジング(エスケープ)対策」をしていない事による脅威内容。また、対策手順について解説してきました。

Webサイトを運営している場合は、必ず「サニタイジング(エスケープ)対策」をしておくようにしましょう。

また、今回解説してきた内容(クロスサイトスクリプティングへの対策)以外にも、様々な驚異から、サイトを守らなければなりません。

そこで、サイト運営者がやっておかなければならない「脅威対策」を、総合的にまとめている記事がありますので、ぜひ確認しておいてください→【ハッキング対策まとめ!自分のサイトを守るための9つの方法】

コメントを残す

メールアドレスが公開されることはありません。