« ダメじゃんAmazon | メイン | phpでひらがな、カタカナの判別 »
2006年05月11日
magic_quotes_gpc
PHPではGET、POST、COOKIEへの入力時に「全ての' (シングルクオート), " (ダブルクオート), \ (バックスラッシュ)およびNULL 文字がバックスラッシュで自動的にエスケープされます」。
これはPHPのデフォルト設定であり、この設定があるために、PHPではSQLインジェクションの危険性が軽減されます。おそらくMSのASP(Active Server Pages)ではこのような設定がない(ASPについてはよく知りませんけど)ために、SQLインジェクションが多発しているのだと思います。(この設定があるからと言って、必ずしもPHPが安全というわけではありません)
逆にPHPでの開発時にこのことを知っておかないと、明示的にエスケープした際に二重にエスケープされてしまうということが起こります。(「\」という文字が「\\\」になる)
機能的にはaddslashes関数と同一ですが、ある程度PHPでの開発に慣れてくると、却ってこの設定が開発の自由度と効率を失わせてしまうので、php.iniでoffにするか、stripslashes()でエスケープを削除した上でmysql_real_escape_string関数やhtmlspecialchars関数等で入出力箇所に合ったエスケープをした方が開発しやすくなります。
もちろん、設定をoffにする場合は、その危険性を十分に認識した上で行ってください。
投稿者 Utayume : 2006年05月11日 15:05| 05 Work(Perl, PHP, etc)
AD
トラックバック
このエントリーのトラックバックURL:
http://ondes-martenot.info/MT/mt-tb.cgi/679
コメント
PHP6ではmagic_quotesなくなっちゃいます
投稿者 ぺ : 2009年02月10日 00:16
magic_quotes_gpcがなくなるのは、開発者が意識してエスケープするようになり、よい修正だと思っています。
投稿者 うた夢 : 2009年02月24日 16:24