人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

http://slashdot.jp/askslashdot/comments.pl?sid=389009&cid=1290697
ここのリンク先に、PHPを使う上での注意として
「SQL文に変数を埋め込むときにはプレースホルダを使う(PDOのprepareとbindParams)」
とあります。
たとえばCakePHPにはプレースホルダがないように思うのですが、Cakeを使うと穴ができてしまうのでしょうか。それともCakeのORマッパー自体にプレースホルダの機能があり、それで十分なのでしょうか。

http://d.hatena.ne.jp/cakephper/20090417/1239939705
このような記事も見つけました。
Cakeのqueryメソッドで値をbindできるらしいのですが、記事中段のあたりに
「Cakeが自前でやってる擬似バインドです。」
とあります。

疑問点をまとめると、
1.CakeのORマッパーでSQLインジェクション対策として十分なのか
2.それともCakeのqueryメソッドのbindを使う必要があるのか
3.queryメソッドでも擬似バインドであり、やはり対策として不十分なのか
4.プレースホルダの機能がないCakePHPを使うと、穴が残るのか。具体的にどのような穴が残るのか。

となります。疑問点がすべて解消されるとうれしいのでお礼ポイントを300ポイントほど用意しておきます。

●質問者: dedara
●カテゴリ:インターネット ウェブ制作
✍キーワード:BIND Cake CakePHP PHP SQL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● tasklight
●35ポイント

1.CakeのORマッパーでSQLインジェクション対策として十分なのか

不十分です。

O/Rマッパーはインタプリタに過ぎないので、インジェクション対策の対症療法にしかなり得ない。


2.それともCakeのqueryメソッドのbindを使う必要があるのか

3.queryメソッドでも擬似バインドであり、やはり対策として不十分なのか

4.プレースホルダの機能がないCakePHPを使うと、穴が残るのか。具体的にどのような穴が残るのか。

queryもbindも不十分です。


そして、マルチバイト文字を使っている場合はプレースホルダにしても不十分です。

なぜなら、バインド変数としてエスケープ記号を含むシフトJIS文字(十など)が入ってきた場合、想定外のエスケープ処理が行われるためです。


携帯電話サイトなど、設計上、シフトJISを使わざるを得ないシステムでは、自力でエスケープ処理するメソッドを用意してやる必要があります。

◎質問者からの返答

マルチバイト文字の問題はDB接続時の文字コードをUnicodeとすることで回避できそうです。

携帯サイトを作るときもDBに格納する文字コードはシフトJISじゃないものを使うのが良いと思いました。


2 ● k-tan2
●35ポイント

現実問題、プレースホルダだけを用いて開発するのはかなり制限がかかるので

実際のWEBアプリ(PHP以外でも)開発では、それ以外の方法も使われています。

プレースホルダだけを使えばよいとか言うのは、原理至上主義者か現場の開発がわかっていない人たちだけです。

プレースホルダだけをつかっても、セキュリティーフォールは余裕でできます。

>プレースホルダの機能がないCakePHPを使うと、穴が残るのか。具体的にどのような穴が残るのか。

SQLを発行するところで、条件に入力値を用いるところは、入力した値がいかなる値であっても大丈夫のように

チェックすべきです。

確かに、プレースホルダを使えば、入力値に 名前 and ・・・というようにSQL文字を改変することは無理になって

安全です。守られるのはここだけです。

一般的な、「SQLインジェクション対策」をすれば問題ないんです。プレースホルダを使わなければならないという制約はないです。

>Cakeが自前でやってる擬似バインドです

そうです。

Cake以外のフレームワークでも擬似バインドのものはいろいろあります。

Javaとかでも擬似バインドのフレームワークは多いですが、問題なく使われています。

◎質問者からの返答

擬似バインドでもなんでも、SQL生成に使う変数をエスケープして文字エンコーディングに気を付ければ問題なさそう

というのがわかりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ