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 件のコメント:
コメントを投稿