[PHP-users 11143] Re: フォームの変数をPostgreSQL にINSERT

Yasuo Ohgaki php-users@php.gr.jp
Tue, 29 Oct 2002 11:28:33 +0900


大垣です。

> "Yasuo Ohgaki" <yohgaki@ohgaki.net>さん wrote:
>>安全性をチェックしてからならOkです。
>>
>># ユーザーからの入力値はどのみち全部チェックする必要があります。

ついでにもう一つ。

magic_qoute_gpcは余計なお世話なので、Offにしている方も多いと
思います。php.ini-distではmagic_qoute_gpc=Onなので、入
力値はエスケープ(addslashes)済みで、これでSQL文が安全と考えて
いらっしゃる方もいるかも知れません。しかし

<?php
var_dump(addslashes(';'));
?>

としてみれば解りますが、addslashesだけではSQLインジェクション
は防げません。例えば、

pg_query($db, 'SELECT a FROM test WHERE id = '.$POST['id'].';');

で、$_POST['id']に

1;DELETE FROM test

が入っていると困る方もいらっしゃるのでは?

最後に、pg_convert()はmagic_quote=Offが前提に作成されています。
つまり、magic quoteが有効な場合、テキストタイプのデータ型では
スラッシュ入りの文字列をpg_escape_stringまたはaddslashes
でエスケープします。

# HTMLとして出力する場合も、htmlentitiesでエスケープするべきであり
# magic quoteはやはり邪魔です。

--
Yasuo Ohgaki