サニタイズとは
- 特殊な文字を別の文字に置き換えることです。
- セキュリティ対策として用いられる手法です。
※「サニタイズ」と同じ意味で「エスケープ」という言葉も用いられています。
サニタイズの役割
- サニタイズにより入力値に特殊な文字を入力されても無害化して、予期せぬ動作を防ぐ役割があります。
サニタイズの事例
ここでは、サニタイズの役割についてもう少しわかりやすく説明します。
サニタイズが無効になっている場合
例えば、以下のようなお問い合わせフォームがあるとします。
「名前」の箇所に次のようなJavascriptのコードを入力して送信します。
すると、Javascriptのコードが処理され、画面にアラートウィンドウが表示されてしまいました。
このように、入力値にコードが入力されてしまうと、予期せぬ動作が引き起こす可能性があります。
そのため、サニタイズにより入力値に特殊な文字を入力されても無害化する必要があります。
サニタイズの書き方
- サニタイズはhtmlspecialchars関数を使います。
htmlspecialchars($string, $flags, $encoding);
引数
$string - 文字列
$flags - フラグの種類
$encoding - 文字コード
文字列
- 対象の文字列を指定します。
フラグの種類
ENT_COMPAT
ダブルクオートは変換するが、シングルクオートは変換しない
ENT_QUOTES
シングルクオートとダブルクオートを共に変換する
ENT_NOQUOTES
シングルクオートとダブルクオートは共に変換されない
文字コード
- UTF-8などの文字エンコードを指定します
HTMLエンティティ化
htmlspecialchars関数を使うことで、HTMLタグやスクリプトコードなどの特殊な文字を変換することを「HTMLエンティティ」と言います。
例えば、HTMLタグで「”」(ダブルクォート)が「"」
に変換されます。
また、「’」(シングルクォート)が「'」
または「'」
に変換されます。
コード例
<?php echo htmlspecialchars($_POST["name"], ENT_QUOTES, "UTF-8")?>
こうすることによって、先程のJavascriptのコードの場合、画面にアラートウィンドウが出力されることなく、安全に動作します。