Sanitizeの中身

Sanitizeのソースを読んで気付いた、マニュアルには載ってない、あるいは分かりずらいポイントなど*1


引用ソースは全てcake/libs/sanitize.php

clean()がデフォルトで処理してるもの

端的に言うと、clean()をかけると、

  • よからぬ文字を安全化して
  • html()とescape()をかけます。
具体的内容
  • 0xCAなどの、よくないスペースを安全化
  • Sanitize::html()
    • 具体的には &, %, <, >, ", ', (, ), +, -
    • 処理したくない場合の$options['encode']=false。変数名はhtmlentitiy とかにして欲しいような・・・
if ($options['encode']) {
	$data = Sanitize::html($data);
}
  • バックスラッシュ付きの$(\\\$)を$に
  • キャリッジリターン(\r)削除
  • html()の処理で&が変換されてしまった10進数のユニコードを元に戻す
if ($options['unicode']) {
	$data = preg_replace("/&amp;#([0-9]+);/s", "&#\\1;", $data);
}
  • Sanitize::escape() SQL用のエスケープ
    • 具体的には、mysqlなら \x00, \n, \r, \, ', ", \x1a

http://php.tonnikala.org/manual/ja/function.mysql-real-escape-string.php

    • $options['encode']と$options['connection']が関連。
if ($options['escape']) {
	$data = Sanitize::escape($data, $options['connection']);
}
  • 不正なバックスラッシュを安全化

マニュアルに載ってないけど実はこんな処理もできる

stripWhitespace($str)

改行とタブを削除して、連続する半角スペースを1個のみにする

stripImages($str)

imgタグ削除

stripScripts($str)

scriptタグとstyleタグ削除

stripAll($str)

stripWhitespace(), stripScripts(), stripScripts()を全て処理する

stripTags($str, $tag1, $tag2・・・・)

第二引数以降に指定したタグを削除

*1:ver.1.2.5