【WordPressでリダイレクト先URLの無効な文字列などを除去する「wp_sanitize_redirect」】

安全にリダイレクト処理をしてくれる関数「wp_safe_redirect」について書きましたけども、その中で、「wp_sanitize_redirect」って関数がありましたので、ちょっと気になったので調べました。なんだか関数ばっかり最近見ていますね。あぁ~、とても勉強になります!

 

「wp_sanitize_redirect」について

 

Codexの「Function Reference/wp sanitize redirect」を参考にいたしますと、

 

Sanitizes a URL for use in a redirect. Removes invalid URL characters in the URL parameter.

 

って書いてあります。例によって和訳できないんですが、たぶん、

 

リダイレクトに使うURLをサニタイズしますよ。無効な文字列とかあったら削除しますよ。

 

って書いてあると思います。なるほど~。関数名そのままですね、わかりやすいです!

 

サニタイズとは

サニタイズとは – IT用語辞典 Weblio辞書」から引用しますと、

 

サニタイジングとは、テキストデータ上の「&」や「>」など特殊文字を一般的な文字列に変換する処理のことである。サニタイジング(sanitizing)はもともと「消毒する」「無害化する」などの意味を持つ英語である。

 

文字列を無害化する、ということですね。なぜ無害化しないといけないか、といった概要も「サニタイズとは – IT用語辞典 Weblio辞書」から確認することができます。・・・確認が面倒だと思いますので、要は、入力フォームを用意したとして、「この入力フォームに、なんかURLを入れてください~」みたいに募ったとして、そこに入力されるコードって、人それぞれ意図が「ある」「ない」に関わらずいろいろあるんで、たとえば悪意のあるコード(javascriptでなんか重要なデータを取得、など)が入力された場合には、それが実行されないようにしようっていう意味だと思います。・・・やっぱり、参考リンクを確認された方がよいでしょうね。。

 

というわけで、コードの書き方などは以下です。

 

コード(Codexからサンプルコードを参考)

wp_sanitize_redirect($location);

 

パラメーター

$location → リダイレクトさせるURLを入れればOK

 

関数の処理はこうなっている

if ( !function_exists('wp_sanitize_redirect') ) :
 /**
 * Sanitizes a URL for use in a redirect.
 *
 * @since 2.3
 *
 * @return string redirect-sanitized URL
 **/
 function wp_sanitize_redirect($location) {
  $location = preg_replace('|[^a-z0-9-~+_.?#=&;,/:%!]|i', '', $location);
  $location = wp_kses_no_null($location);

// remove %0d and %0a from location
  $strip = array('%0d', '%0a', '%0D', '%0A');
  $location = _deep_replace($strip, $location);
  return $location;
 }
endif;

 

「preg_replace」でおおよその無効とされる文字列を置換して除去してますねぇ。他にもいろいろ気になる関数はありますけど、また別機会でメモしようと思っています~。

著者:bouya Imamura