magic_quotes_gpcというオプションがphp.iniにある。このオプションが有効になっていると、データを渡していくことを繰り返すうちに文字列のエスケープの回数が増えるという問題が発生するそうだ(詳しくはこちらを参照)。オプションが有効化されていることで、エスケープされてしまう文字としては5c問題に該当する文字になる。そこで、一般的な処理としてどのようにエスケープ処理のコードを書くのかということについて示しておく。今回はDB(PostgreSQL)に入れるための文字列がフォームから入ってきた場合を想定しておく。
<?php
function convert_str_for_query($string){
if( get_magic_quotes_gpc() ){ // magic_quotes_gpcオプションの状態を取得
$string = stripslashes($string); // 全体に対しバックスラッシュを取り除いた文字列を返す
}
$string = htmlspecialchars($string); // <や&のような文字列をエスケープする
// 上のコードは一般的には表示の際に対策を立てておくためと考えられる
$string = pg_escape_string($string); // PostgreSQLのクエリとなる文字列をエスケープする
// ちなみにMySQLであれば、$string = mysql_real_escape_string($string); とする
return $string;
}
?>

0 件のコメント:
コメントを投稿