- PR -

SQLインジェクション対応

1
投稿者投稿内容
キヨ
ベテラン
会議室デビュー日: 2004/08/24
投稿数: 65
投稿日時: 2007-06-29 18:59
お世話になります。

現在、PHP5.2.0/Smarty-2.6.2/Oracle10gにてWebアプリケーションを作成しております。

そこで、SQLインジェクション対応として、PHP関数のaddslashesを使用して
対応しようと考えて使用しましたが、Oracleエラーとなりました。

「'」の場合、「/'」にエスケープされますが、Oracleではエラーとなってしまうわけです。

手作り関数で、「'」→「''」にエスケープさせるとか考えていますが、
PHPの関数で、上記の対応ができる関数を知っていたら、教えてください。

すみませんが、よろしくお願いします。
kalze
ぬし
会議室デビュー日: 2003/10/23
投稿数: 406
お住まい・勤務地: 東京・東京
投稿日時: 2007-06-29 19:29
Oracleは使ってないので、微妙に的外れかもしれませんが。

引用:

現在、PHP5.2.0/Smarty-2.6.2/Oracle10gにてWebアプリケーションを作成しております。



データベースへの接続は何を使っていますか?
PDO?PEAR?それ以外?

引用:

そこで、SQLインジェクション対応として、PHP関数のaddslashesを使用して
対応しようと考えて使用しましたが、Oracleエラーとなりました。



addslashesはSQLインジェクション対策としては不十分であり、推奨されていませんが。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2007-06-30 01:28
PHP でどう書くかはわからないのでもうしわけないですが、バインド変数を使うっていうのが対策の一つとして紹介されていたりします。
(それで万事解決かどうかまでは自信ないですが)

_________________
もしもし@RMAN 友の会
キヨ
ベテラン
会議室デビュー日: 2004/08/24
投稿数: 65
投稿日時: 2007-06-30 11:30
ご返答ありがとうございます。

DB接続には、PEARを使用しております。

バインド変数・addslashes以外で他にないでしょうか。
kalze
ぬし
会議室デビュー日: 2003/10/23
投稿数: 406
お住まい・勤務地: 東京・東京
投稿日時: 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まで調べてないので分からないけど
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-06-30 17:06
直接的な回答じゃなくてごめんなさい。

必ずエスケープ用の関数を使うという方針にすると、
必ず抜けが出たりして、そこが問題になることが多いと思います。
最初からバインド変数を使うという前提にした方が安全だと思いますね。
キヨ
ベテラン
会議室デビュー日: 2004/08/24
投稿数: 65
投稿日時: 2007-07-02 10:35
みなさんありがとうございます。

DB_common::quoteSmart()
DB_common::escapeSimple()
上記2つを検証してみます。

>最初からバインド変数を使うという前提にした方が安全だと思いますね。
そうですね。
今後から気をつけていきたいと思います。

ありがとうございました。
キヨ
ベテラン
会議室デビュー日: 2004/08/24
投稿数: 65
投稿日時: 2007-07-02 10:35
みなさんありがとうございます。

DB_common::quoteSmart()
DB_common::escapeSimple()
上記2つを検証してみます。

>最初からバインド変数を使うという前提にした方が安全だと思いますね。
そうですね。
今後から気をつけていきたいと思います。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)