[PHP-users 32369] Re: PHPを使ってのPostgresqlについて

kanonbell kanonbell.sky @ gmail.com
2007年 7月 3日 (火) 22:49:42 JST


こんばんは。

> > $hoge = $_REQUEST['hoge'];
> > $whereSQL = "WHERE abc LIKE '%$hoge%'";
>
> 2つエスケープ漏れがあります。
>
> まず、クエリに渡す全ての変数はpg_escape_string(またはpg_escape_bytea)で
> エスケープしなければなりません。PEARのescapeメソッドを使えば良いです。

個人的には、クエリに変数を渡す際にはPrepared Statementするのがいいと
思ってます。
PostgreSQLの場合は

pg_prepare
http://jp.php.net/manual/ja/function.pg-prepare.php
pg_execute
http://jp.php.net/manual/ja/function.pg-execute.php

このあたりでしょうか。

とりあえずPHPでSQLを操作する練習って段階ならともかく、ちゃんと実装って
段階になるならSQLインジェクション対策は必須になるでしょうし、変数ひとつ
ひとつエスケープするよりこっちのが楽な気もするので。漏れにくいし。

Prepared Statementは本来は何度も実行されるクエリの速度向上を目的と
したもので、滅多に呼ばれないならマイナスになっちゃう可能性がありますけど、
いまどき気にするほどのコストじゃないでしょうし。。

変数個別にエスケープするやり方の方がこういうメリットがあるよ!とか
あったら教えてくださいませ。
楽さんはとりあえず使い始めたところ、ってあたりなのかなと言う気もするので、
最初からPrepared StatementはSQLの使い方理解しにくいとかは
ありそうな気もしますけれど。


PHP-users メーリングリストの案内