Model->query()のエラーについて教えて下さい

438 views
Skip to first unread message

タケ

unread,
Feb 17, 2014, 8:23:09 PM2/17/14
to fuelp...@googlegroups.com
こんにちは。

FuelPHP 1.7.1 での質問です。


Model->query()に単純なwhereに array( where=>arrat('aaa', '>', 100) )を渡したら、
以下のようなエラーが出ました。


RuntimeException [ Error ]:
Object class "Orm\Query" could not be converted to string or sanitized as ArrayAccess. Whitelist it in security.whitelisted_classes in app/config/config.php to allow it to be passed unchecked.


調べて app/config/config.php に

'whitelisted_classes' => array(
              'Fuel\\Core\\Response',
              'Fuel\\Core\\View',
              'Fuel\\Core\\ViewModel',
              'Closure',
              'Orm\\Query'  <<<<
          ),

を追加することで通るようになりました。


動作としては問題ないのですが、セキュリティ的に問題がある使い方になるのでしょうか?
値は上記は100となっていますが、通常は Input::post() で取得します。

また他に正しい使い方があるようでしたら、教えていただけると助かります。


よろしくお願いいたします。


// Take 



池崎 真太郎

unread,
Feb 17, 2014, 8:34:42 PM2/17/14
to fuelp...@googlegroups.com
池崎です。

Model->query()
の返却は、find結果のイテレータではなく、
Orm\Queryインスタンスです。
おそらくそれをそのままviewに突っ込んでいる為、
エラーとなっているのでしょう。

イテレータを得たいのでしたら、
さらに->get()をコールする必要があるはずです。

Kenji Suzuki

unread,
Feb 17, 2014, 8:50:02 PM2/17/14
to fuelp...@googlegroups.com
Kenji です。


whitelisted_classes に追加するということは Fuel の自動エスケープを無効にするということ
です。

なので、追加した場合は、そのオブジェクトに関して、エスケープ漏れが起こらないように自分で
確実にチェックする必要があります。

影響を把握せずに、単に whitelisted_classes に追加するというのは、セキュリティ的に問題が
ある使い方となりますね。


// Kenji
> --
> このメールは Google グループのグループ「fuelphp.jp」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、fuelphp_jp+...@googlegroups.com にメールを送信します。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
Message has been deleted

タケ

unread,
Feb 19, 2014, 11:24:33 PM2/19/14
to fuelp...@googlegroups.com

Kenjiさん、池崎さん、 
ご返信ありがとうございました。 


> 影響を把握せずに、単に whitelisted_classes に追加するというのは、セキュリティ的に問題が 
ある使い方となりますね。 

そのとおりですね。 
もう少し調べましたら、 $where に検索条件のarrayを入れ、 

 Model_Product::find('all', array('where' => $where)); 

とすることでWhitelistを使わずにエラーが解消しました。 
どうやら query() を使う場面ではなかったようです。 


勉強になりました。 




2014年2月18日火曜日 10時50分02秒 UTC+9 Kenji Suzuki:
> このグループから退会し、メールの受信を停止するには、fuelphp_jp+unsubscribe@googlegroups.com にメールを送信します。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
Reply all
Reply to author
Forward
0 new messages