Home > CakePHP > CakePHP 1.2RC1からは比較演算子をキーに書く

CakePHP 1.2RC1からは比較演算子をキーに書く

この記事の所要時間: 155

via: “1.2RC1でのSQLインジェクション対策” フォーラム – CakePHP Users in Japan

リンク先にあるとおり、1.2RC1ではfind()の条件を指定する際、比較演算子を配列のキー側に書くように変更されています。

CakePHPでは値の先頭にある比較演算子をSQLとして実行してしまう特性があったので、1.2betaまでは以下のようなコードを記述していました。

    // $id = 1が外部から来るとする
    $user = $this->User->find(array('id' => '= ' . $id)); 

しかし1.2RC1でこのコードを実行すると[‘= ‘ . $id]が値として認識されてしまいます。

SELECT * FROM users WHERE id = '''= '' 1';

1.2RC1では条件配列のキーの部分に比較演算子を書くようになっています。

     // 比較演算子の前に半角スペース[0x20]を入れる
     $user = $this->User->find(array('id =' => $id)); 

キーに演算子が無ければ[=]とみなされるので、等号で比較するなら[‘ =’]は省略できます。

     $user = $this->User->find(array('id' => $id)); 

LIKE句なども同様に配列キーに記述します。

     $list = $this->User->find('all', array('conditions' => array('name LIKE' => '%foo%')));

通常、条件配列のキーはコードに直接記述するため、外部からは変更できません。セキュリティを高める意味でこれは良い変更だと思います。

# これでいちいち[‘= ‘ . $value]と書くのから解放されます。:-D

ただ1.2betaまでに合わせて書いたシステムでは、1.2RC1へ移行する際は修正が必要になります。

Pocket

follow us in feedly

コメント (Close):1

showBOO 09-02-09 (月) 22:11

助かりました。
1.2で途方に暮れていたところ、この記事を見つけ、解決することができました。
ありがとうございました。

トラックバック:1

このエントリーのトラックバックURL
http://www.1x1.jp/blog/2008/06/cakephp_operator_injection_12rc1.html/trackback
Listed below are links to weblogs that reference
CakePHP 1.2RC1からは比較演算子をキーに書く from Shin x blog
pingback from CakePHP 1.2でのSQLインジェクション対策 - ElectronicBrain is eating BreakFast 09-02-09 (月) 22:14

[…] CakePHP 1.2RC1からは比較演算子をキーに書く | Shin x blog […]

Home > CakePHP > CakePHP 1.2RC1からは比較演算子をキーに書く

検索
フィード
メタ情報

Return to page top