PHP でフォームデータをエスケープ処理する方法

はじめに

実務にて、フォームデータのエスケープ処理を実装する作業があり、それを解決した情報になります。Web 開発の初心者、初学者の方にもわかりやすいように、ソースコードを編集してサンプルを公開しています、ご参考になれば幸いです。

検証環境

サンプル

解説

サンプルのソースコードを基に、要点だけ説明します。

エスケープ処理

エスケープ処理とは、サニタイジングの 1 つで、特別な意味を持つ文字や記号を別の文字列に置換する処理のことです。

サニタイジングとは、消毒、無害化という意味があり、エスケープ処理以外にもバインド機構、バリデーションなどの Web アプリケーションにおけるセキュリティ対策を含む言葉です。認識の齟齬が生じやすい言葉なので、英語がわからないルー大柴みたいな人と仕事の確認をする時は気を付けましょう。

エスケープ処理は、XSS 対策に有効です。例えば、悪意のあるユーザーによって、フォームから攻撃用サイトへ クッキー 情報を渡すスクリプトが書き込まれた際に、スクリプトに含まれる特殊文字を HTML エンティティ に変換して防ぐことができます。

エスケープ処理は、htmlspecialchars で実現できます。基本的に、第二引数は ENT_QUOTES、第三引数は ‘UTF-8’ を指定します。

function h(string $str): string {
  return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}

変換対象となる特殊文字は <>"'& です。

第三引数のデフォルト値は default_charset の “UTF-8” になるので省略可能のように思えますが、default_charset の指定が入力とは違う文字セットになっている可能性もあるので、省略しない方が無難です。

以上です。

おわりに

サンプルのソースコードを再利用する際は、要件定義やコーディング規約にお気を付けください。