« ダメじゃんAmazon | メイン | phpでひらがな、カタカナの判別 »

2006年05月11日

magic_quotes_gpc

PHP: マジッククオート - Manual

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

ベルメゾンネット ニッセン セシール ムトウ IMAGEnet DHCオンラインショップ 白鳩/京都発インナーショップ

トラックバック

このエントリーのトラックバック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

AD

Mac ソフトのことなら act2.com デル株式会社 ioPLAZA【アイ・オー・データ直販サイト】 Just MyShop(ジャストシステム)