- - PR -
SQLインジェクション対応
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-29 18:59
お世話になります。
現在、PHP5.2.0/Smarty-2.6.2/Oracle10gにてWebアプリケーションを作成しております。 そこで、SQLインジェクション対応として、PHP関数のaddslashesを使用して 対応しようと考えて使用しましたが、Oracleエラーとなりました。 「'」の場合、「/'」にエスケープされますが、Oracleではエラーとなってしまうわけです。 手作り関数で、「'」→「''」にエスケープさせるとか考えていますが、 PHPの関数で、上記の対応ができる関数を知っていたら、教えてください。 すみませんが、よろしくお願いします。 | ||||||||
|
投稿日時: 2007-06-29 19:29
Oracleは使ってないので、微妙に的外れかもしれませんが。
データベースへの接続は何を使っていますか? PDO?PEAR?それ以外?
addslashesはSQLインジェクション対策としては不十分であり、推奨されていませんが。 | ||||||||
|
投稿日時: 2007-06-30 01:28
PHP でどう書くかはわからないのでもうしわけないですが、バインド変数を使うっていうのが対策の一つとして紹介されていたりします。
(それで万事解決かどうかまでは自信ないですが) _________________ もしもし@RMAN 友の会 | ||||||||
|
投稿日時: 2007-06-30 11:30
ご返答ありがとうございます。
DB接続には、PEARを使用しております。 バインド変数・addslashes以外で他にないでしょうか。 | ||||||||
|
投稿日時: 2007-06-30 14:52
PEARのoracle対応はpostgreSQLとかに比べると、まだまだって印象ですが、
今はよくなったのかなぁとおもいつつ。 PEARは使ったことがないので、ちゃんと問題がないか検証したわけではありません。 一応、関数の紹介はしますが、addslashesと同様な問題がないのかどうかはわかりません。 (自分はPHP+PostgreSQL使っていて、PostgreSQLに用意されているエスケープを使っているので) DB_common::quote() 1.6.0で廃止されたので、それより前のバージョンなら。 バージョンアップするときに問題ですけど。 次の2つの関数の使用が推奨されています。 DB_common::quoteSmart() DB_common::escapeSimple() どちらも「現在の DBMS の規則に基づいて文字列をエスケープする」とマニュアルには書かれていますが、最初に書いたように、自分が実証したわけではないので、一応検証しておいた方がよいかと。 後はescape()関数とか。 プリペアードクエリ(プリペアードステートメント)使うって方法もあるとおもいます。 LIKEとか使わない仕様なら、BASE64でエンコードしてDBにぶち込むという方法もあるかなぁとおもいますが。 #oci8とかには、oracle用のエスケープ関数とかはないのかなぁ #oci8まで調べてないので分からないけど | ||||||||
|
投稿日時: 2007-06-30 17:06
直接的な回答じゃなくてごめんなさい。
必ずエスケープ用の関数を使うという方針にすると、 必ず抜けが出たりして、そこが問題になることが多いと思います。 最初からバインド変数を使うという前提にした方が安全だと思いますね。 | ||||||||
|
投稿日時: 2007-07-02 10:35
みなさんありがとうございます。
DB_common::quoteSmart() DB_common::escapeSimple() 上記2つを検証してみます。 >最初からバインド変数を使うという前提にした方が安全だと思いますね。 そうですね。 今後から気をつけていきたいと思います。 ありがとうございました。 | ||||||||
|
投稿日時: 2007-07-02 10:35
みなさんありがとうございます。
DB_common::quoteSmart() DB_common::escapeSimple() 上記2つを検証してみます。 >最初からバインド変数を使うという前提にした方が安全だと思いますね。 そうですね。 今後から気をつけていきたいと思います。 ありがとうございました。 |
1