HTMLのサニタイズとは?XSSを防ぐための実装方法を解説

Webサイト運営において、サイトを外部の脅威から守るためには、サニタイズは必須の対策です。

今回は、HTMLにおけるサニタイズの意味や、サニタイズする方法について解説していきます。サニタイズしないサイト運営が、どれほど危険なのかについても紹介しているので、ぜひご覧ください。

HTMLでのサニタイズとは

HTMLでのサニタイズ(エスケープ)とは、そのままではブラウザが認識しない特殊文字を別の文字列に置き換える処理のことです。

例えば、HTMLで「<」や「>」を使用すると、ブラウザがタグの一部として認識してしまいます。そのため、「<」と「>」は、「<」と「>」にサニタイズ化して、単なる文字列として扱えるようにします。

HTMLでサニタイズする方法

それでは、実際にサニタイズするにはどうすればいいのでしょうか?
サニタイズするのは、HTML生成時です。実際にサニタイズする方法を、サイト制作でよく使用される各言語でみていきましょう。

JavaScriptでのサニタイズ

JavaScriptには、サニタイズ用の関数は用意されていません。そのため、文字列を置換するオリジナルの関数を作って、サニタイズしましょう。

定義する関数の参考例を紹介します。

replace関数で、文字列置換を実施しています。HTMLタグで使われる「<」と「>」はもちろん、「&」と「/」もHTMLソースで意味を持つ文字列であるため、特殊文字に置換してサニタイズしています。

PHPでのサニタイズ

PHPには、サニタイズ処理用の関数として、htmlspecialchars関数が用意されています。htmlspecialchars関数の使い方は次の通りです。

入力フォームから送信された文字列を、&str変数に格納し、上記のようにhtmlspecialchars関数を使用することで、サニタイズされた文字列を戻り値として返します。

関数の第2引数には、サニタイズのルールを設定します。基本的には、「ENT_QUOTES」で問題ありません。そして第3引数には、サニタイズされた文字列の文字コードを設定します。一般的に使われているのが「UTF-8」です。

SQLでのサニタイズ

SQLでのサニタイズは、プリペアードステートメントを利用します。それでは、プリペアードステートメントを使う参考例を紹介します。

上記のよう準備することで、フォームで入力されたデータは、prepareでSQL文になります。こういった対策をすることで、データベースの不正操作を未然に防ぐことができます。

データベースは、重要データの宝庫です。顧客情報が流出すれば、自分たち以外にも被害を与えてしまいます。SQLでのサニタイズは特に重要だといえますね。

入力フォームでデータをチェックする

サニタイズする手間を省くため、入力フォームで文字列データをチェックして不正な文字列は、保存しないようにする方法もあります。例えば、電話番号や郵便番号の入力フォームでは、数字以外は入力できないようにするなどです。

注意点として、入力データのチェックは、サーバー上で行うようにしましょう。JavaScriptを使ってブラウザ上でチェックも可能ですが、データ入力者がブラウザのJavaScriptを無効にするだけで、データのチェックを免れてしまいます。必要なのは、PHPなどを使ったサーバー側でのデータチェックです。

HTMLでサニタイズしないときの危険性

掲示板やSNS、サイト内の入力フォームでは、サニタイズ対策は必要不可欠です。サニタイズ対策を怠ったサイトは、「悪意あるユーザーに、有害な動作をするスクリプトを入力される脅威にさらされている」状態で、非常に危険です。

そこで、サニタイズと関連の深いXSSについて紹介します。

XSS(クロスサイトスクリプティング)とは

XSS(クロスサイトスクリプティング)とは、Webサイトの脆弱性を悪用したサイバー攻撃の1つです。XSSでは、不正なプログラムで標的サイトの情報を別のサイトに流出させる被害などが考えられます。

XSSは、入力フォームなどにJavaScriptなどで入力された、不正なプログラムが引き金となって引き起こされます。そのため、入力データをサニタイズして、無害化する必要があります。

XSSの攻撃による脅威には、次のような被害が想定されます。

  • Cookie情報の流出
  • フォームに入力された情報の流出
  • Webページに偽の情報が表示される
  • Webページで強制操作が行われる

Cookie情報には、ログインに必要なユーザーパスワードやセッション情報などが含まれます。また、フォームに入力した個人情報やキャッシュカード情報を盗まれる可能性もあります。他にも、不正に埋め込まれたJavaScriptの動作によって、Webページ自体を操作される可能性があります。

こういった被害を避けるためにも、サニタイズ対策は、しっかりと行いましょう。

まとめ

いかがでしたか?HTMLでのサニタイズは、健全なWebサイト運営に必要だと理解してもらえたでしょうか?

サニタイズしないサイト運営は、XSSの脅威にさらされ、様々な被害に遭う可能性があります。サニタイズする方法は決して難しくはありません。サイト制作の際には、必ずサニタイズするように注意しましょう。

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?