WordPress で外部から来る変数を扱う時の注意点

Categories WordPress

不要なバックスラッシュを除去する

WordPress で $_GET、$_POST、$_REQUEST、$_COOKIE、$_SERVER といった PHP のスーパーグローバルの値を扱う時は、まず wp_unslash()を使用して不要なバックスラッシュを取り除いてやる必要があります。これは WordPress 内部において PHP のマジッククオートと同等の処理が行われているためです。

$data = wp_unslash( $_GET['data'] );

データを無害化 (サニタイズ) する

外部からやって来るデータにはシステムやユーザーに害を与える危険なものも含まれています。データの種類・文脈 (コンテキスト) に応じて適切な無害化 (サニタイズ) 処理を行ってください。

以下にサニタイズ処理の例を示します。

たとえば、利用されるデータの型が予め整数に決まっている場合は PHP の型キャストを使って入力データを強制的に整数に変換しておくことができます。

if ( isset( $_GET['id'] ) )
  $id = (int) wp_unslash( $_GET['id'] );
else
  $id = 0;

入力データを文字列としてページに出力する場合は esc_html() 等を使って不正な HTML を無害化します。

if ( isset( $_GET['text'] ) )
  $text = esc_html( wp_unslash( $_GET['text'] ) );
else
  $text = '';

WordPress のサニタイズ関数

WordPress には用途に応じた様々なサニタイズ関数が用意されています。これらは安全なコードを書くうえで不可欠なものですので、一度目を通しておくことをおすすめします。