[CUBBY-146] リクエストパラメータのバインド方法を改善する Created: 2008-07-01  Updated: 2009-07-05  Resolved: 2008-07-31

Status: Closed
Project: Cubby
Component/s: Core
Affects Version/s: None
Fix Version/s: 1.1.0-rc1

Type: Improvement Priority: Major
Reporter: baba Assignee: baba
Resolution: Fixed Votes: 0
Labels: None


 Description   

現在はリクエストパラメータはその名前と同名のプロパティにバインドされます。
これだと、想定外のパラメータが入力された場合には(インジェクションされることを想定したプロパティなど)想定外のプロパティにバインドされてしまうことがあります。
セキュリティ的に問題があるので、バインドされるプロパティとバインドされないプロパティを明確に分類できるようにします。



 Comments   
Comment by baba [ 2008-07-31 ]

移行ガイド(src/site/apt/migration.apt)を追加してみました。
内容を確認してみてください。

Comment by baba [ 2008-07-31 ]

@Formのデフォルト値はONLY_SPECIFIED_PROPERTIESではなく、ALL_PROPERTIESにしようと思います。
アクション以外のオブジェクトにバインドするときはすべてのプロパティを対象にとするほうが多いと思うので。
@Formなしの場合は@RequestParameterが必要
@Form("formDto")のようにオブジェクトを指定した場合は@RequestParameter不要

Comment by baba [ 2008-07-31 ]

ちょっと変更します。

もともとあった@Formの属性 binding(バインドするかしないかのフラグ) は deprecated にして、RequestParameterBindingType に NONE を追加します。

@Formに追加する属性を type から bindingType に変更します。

こんなかんじです
@Form(bindingType = ALL_PROPERTIES)
@Form(bindingType = ONLY_SPECIFIED_PROPERTIES)
@Form(bindingType = NONE)

Comment by baba [ 2008-07-28 ]

そうですね。
本体とexamplesを変更しておきました。

Comment by agata [ 2008-07-28 ]

最新版をチェックアウトして、自分のアプリに組み込んでみました。

今後推奨になる「@RequestParameter 」を付ける形で書くと、
「@Form(type=RequestParameterBindingType.ONLY_SPECIFIED_PROPERTIES)」を毎回各必要があるので、デフォルトはONLY_SPECIFIED_PROPERTIESのほうがよい気がしましたが、どうでしょうか?
下位互換性はなくなりますが、移行手順でバージョンアップしてもらってもいいかなと。

Comment by baba [ 2008-07-22 ]

@Formにtypeプロパティを追加します。
ここにはRequestParameterBindingType#ALL_PROPERTIESまたは#ONLY_SPECIFIED_PROPERTIESを指定します。デフォルトはALL_PROPERTIES
ALL_PROPERTIESの場合はすべてのプロパティがバインド対象
ONLY_SPECIFIED_PROPERTIESの場合は@RequestParameterが付いたプロパティのみがバインド対象

また、S2Containerがリクエストパラメータを自動的にバインドしないように、archetypeで生成されるcreator.diconのActionCreatorをexternalBindingをfalseにします。
<component class="org.seasar.framework.container.creator.ActionCreator">
<property name="externalBinding">false</property>
</component>

Comment by agata [ 2008-07-01 ]

バージョンアップの手順がきちんとあれば、問題ないと思いますので、
上記の仕様で問題ないかと思います。

Comment by baba [ 2008-07-01 ]

アノテーション @RequestParameter がついたクラス、プロパティのみにリクエストパラメータをバインドするようにしたいと思います。

  • public フィールドや setter メソッドにつける -> そのプロパティのみがバインド対象
  • クラスにつける -> その暮らすのすべてのプロパティがバインド対象 (1.0.x と同じ動作、フォームを別のクラスにする場合などはこっち)

ただし、これだと後方互換性がなくなってしまいます。
後方互換を保つような方法も残すべきでしょうか?
ご意見ください。

Generated at Sat Apr 27 11:35:23 JST 2024 using Jira 9.15.0#9150000-sha1:9ead8528714127d8cfabf2446010d7e62c0a195c.