PHP
初心者
htmlspecialchars
エスケープ
サニタイズ

入力値のサニタイズで使うhtmlspecialchars関数について紹介!


サニタイズとは


  • 特殊な文字を別の文字に置き換えることです。

  • セキュリティ対策として用いられる手法です。

※「サニタイズ」と同じ意味で「エスケープ」という言葉も用いられています。


サニタイズの役割


  • サニタイズにより入力値に特殊な文字を入力されても無害化して、予期せぬ動作を防ぐ役割があります。


サニタイズの事例

ここでは、サニタイズの役割についてもう少しわかりやすく説明します。


サニタイズが無効になっている場合

例えば、以下のようなお問い合わせフォームがあるとします。

「名前」の箇所に次のようなJavascriptのコードを入力して送信します。

お問い合わせ.png

すると、Javascriptのコードが処理され、画面にアラートウィンドウが表示されてしまいました。

localhost_8888_の内容_と_お問い合わせ完了.png

このように、入力値にコードが入力されてしまうと、予期せぬ動作が引き起こす可能性があります。

そのため、サニタイズにより入力値に特殊な文字を入力されても無害化する必要があります。


サニタイズの書き方


  • サニタイズは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のコードの場合、画面にアラートウィンドウが出力されることなく、安全に動作します。