[PHP-users 6316] Re: magic_quotes_gpc の設定

Sunao Kiyosue php-users@php.gr.jp
Tue, 19 Mar 2002 21:15:50 +0900


きよすえ@福岡です。

Naofumi Kondoh wrote:
> 
> ソフト工房の近藤です。
はじめまして。


> > えっと、基本的にもう、
> > 環境判断して
> > htmlspecialchars()だのstripslasher()だの
> > してくれるクラスを作っちゃったのでそれをどのような場合でも
> > 使用しています。
> 
> .... 略 ....
> 
> 素晴らしい。
そこまでの物でないだけに、恐縮です。。。

> get/post のクラスは簡単だけど、SQL 文を組立てる時の
> addslashes は、どのようにされているのでしょうか。
> 
> magic_quotes_gpc = On の場合は、自動的に stripslashes()
> して、magic_quotes_gpc = Off と同じ状態にするという
> ことでしょうか。
基本的には、それと補足的に、半角カタカナを全角カタカナに強制変換
改行コードの統一、
をしています。


> ところで、SQL の検索値などを FORM 入力する場合は、
> addslashes だけでは当然不十分で、データー型に合った
> 検査など不可欠です。きちんとしたアプリケーションを
> 作るなら、magic_quotes_gpc = Off にして、プログラム
> で、addslashes すべきですね。
同感です。下手に手を加えられると、私の頭では動作が訳がわからなく
なるのも、magic_quotes_gpc = Off にしている理由の一つです。


> system 関数問題と同じだけど、入力チェックしないで、
> SQL 文を組立てると
> 
> $sql = "SELECT * FROM hoge WHERE price < ".addslashes($a).";";
> 
> で、FORM TAG 入力値 $a に
> 
> " 0 ; delete from hoge; "
> 
> なんて入力されたら悲惨なことに。
おっしゃる通りです。考えるのもいやになりますね。。。
基本的に、数値のところも '(シングルコーテーション)で囲んでしまう
スタイルで最近は書いてしまっていたので、あまり気にした事有りませんでした。

自戒の念をこめて反省。

個人的には、入力チェックは、DBに流し込む直前の変換の前に一度かけているので
そちらの方で対応するスタイルになると思います。
入力チェック関係の自作関数は、クライアントによって書き換える事が
多いのでそちらの方がすっきりするかと思います。

でも、パターンマッチング(LIKE述語)の場合のエスケープは
DBに流し込む直前の変換のクラスの中に組み込んであげないといけないのでしょうね。
ちなみに、postgresです。
(ありがたいことに、今気づきました。いまから、修正します。)

では、失礼します。
--