[PHP-users 4191] Re: 不正なSQL になる危険性について

Yasuo Ohgaki php-users@php.gr.jp
Fri, 07 Dec 2001 11:15:31 +0900


大垣です。

addslashes()を使うのが普通です。

Osamu Shigematsu wrote:

> 重松です。こんにちは。
> 
> PHP というよりも、どちらかといえば SQL の問題の気もするのですが、
> 
> <input type="text" name="foo">
> 
> のようなフォームから受け取った文字列を
> 
>     // PEAR 使ってます。:-)
>     $sql = "INSERT INTO bar(foo) VALUES('$foo')";
>     $res = $db->query($sql);
>     if($err = DB::isError($res)){
>         print "database error : $sql\n" . DB::errorMessage($res);
>         break;
>     }
> 
> ってな感じで、登録としているのですが、例えば、foo に ' が含まれたりすると、
> 
>     INSERT INTO bar(foo) VALUES(''');
> 
> 見たいにおかしなことになりますよね?
> 
> このほかにも何か注意するべき特殊な文字というのはあるのでしょうか?
> 
> NUL, " なんかは、PHP の設定によって、エスケープしてくれるように
> 記憶していますが。


自動的にエスケープしてくれるオプション(magic_quote_runtime)があり
ますが、これはSQLを実行した結果をエスケープします。

入力をエスケープする機能は(magic_quote_gpc)になりますが、有効にす
る事とは勧められません。

> 
> とりあえず、' が使えないのはとっても困りますので、どのように SQL を
> 記述すればよいかなどのアドバイスをいただければ幸いです。
> 


$sql = "
SELECT * FROM foo
WHERE name = '".addslashes($_POST['name'])."';
";

などと私は記述しています。

-- 
Yasuo Ohgaki
yohgaki@dd.iij4u.or.jp

__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/