TAKAHASHI Kunihiko
takah****@knosp*****
2006年 4月 10日 (月) 23:23:56 JST
高橋(kunit)です。 On Mon, 10 Apr 2006 11:16:32 +0900 "佐々木栄勝" <naruc****@gmail*****> wrote: > はじめまして、佐々木栄勝と申します。 > いつも拝見させていただいています。 > はじめまして。 これからもよろしくお願いします。 > 現在プロジェクトでMaple 3.1.0を使用しているのですが、 > フィールドにシングルクォートを入力したところSQLエラーが発生してしまいました。 > .htaccessでmagic_quotes_gpcを設定してあるので、Mapleのほうで > $_POSTの値になにか処理をしているのだろうと踏んだところ > Requestクラスでstripslashesしている部分を見つけました。 > 検索して見た限りではaddslashesをしている箇所はないようです。 > > すべてのソースを読んだわけではないのでまだまだ勉強不足なのですが > このstripslashesが意図しているものがよく理解できません。 > 必須の処理だと思うので、Requestクラスのstripslashesを消してしまうのは > まずいと予想していますが、ということはSQLを作成するときには > 必ずaddslashesして値を埋め込む必要があるということでしょうか? > 現状、Mapleでは magic_quote_gpc = On の場合に、積極的にstripslashesを かけています。これは以下の考えに基づいています。 ・リクエストパラメータは入り口で加工するのではなく、使用する直前に 用途に応じて適切にエスケープすべきである。(値が不適切な場合には、 エラーにして処理を中断すべきである) magic_quote_gpcをつかった自動処理は百害あって一利なしだと考えています。 (今ではregister_globals=Onレベルのまずさかなと) 実際、addslashesが自動的にかかってシングルクオートがエスケープされても それは表示の際には邪魔になる(おまけにSJISだと余計な\がつく)し、 addslashesがかかっているからSQLインジェクション対策になるというのは 間違いだと思います。このあたり、大垣さんのブログや書籍に詳しく説明が のっています。 以下のものを見る限り、大垣さんは2002年には既にmagic_quote_gpcの問題を 指摘されてますね。 http://ns1.php.gr.jp/pipermail/php-users/2002-November/011850.html セキュリティーレベルを上げるためには、DB向けにはmysql_escape_string等の 処理を個別に行い、表示向けにはhtmlspecialcharsを個別にかけるというのが 望ましいと考えます。 ・・・という理由でかけております。ご理解いただけますでしょうか? --- TAKAHASHI Kunihiko KNOSPEAR Inc.