フォーラム: 公開討議 (スレッド #38028)

入力画面>確認画面>完了画面におけるActionFormについて (2016-09-11 19:29 by age-griever #78699)

"TERASOLUNA Thin 2.0.6.2"で、オーソドックスな以下の画面遷移を実現
する場合についての質問です。

 入力画面→(バリデート)→確認画面→(DB更新)→完了画面

ここで、ActionFormのスコープはsessionとし、確認画面からのサブミット時に
バリデート済のActionFormからBLogic-IO機能でDTOへ転送してDB更新をする
流れです。

この際、入力画面・確認画面からの両サブミットのアクション定義における
name属性にActionForm名を定義しています。

<!-- 入力画面(insert.jsp)表示用アクション -->
<action path="/userManager/insertSCR" name="_userManagerForm" scope="session" parameter="/userManager/insert.jsp"/>

<!-- 確認画面(validate.jsp)への遷移アクション -->
<action path="/userManager/validateSCR" name="_userManagerForm" scope="session" validate="true" input="/userManager/insertSCR" parameter="/userManager/validate.jsp"/>

<!-- 完了画面(result.jsp)への遷移アクション -->
<action path="/userManager/insertBL" name="_userManagerForm" scope="session"
<exception ・・・略・・・>・・・略・・・</exception>
<forward name="success" path="/userManager/resultSCR" />
<forward name="failure" path="/userManager/insertSCR" />
</action>

これだと仮に、悪意のユーザが確認画面からのサブミットを偽装して、フォーム項目が
POSTされる様にした場合、バリデートをバイパスしてActionFormの更新が
できてしまうと思うのですが、
これをサーバサイド側の定義等で防止する方法をご教示頂きたい。

以下、いくつか、対応策を検討しましたが、うまくいきません。

・「確認画面からのサブミット時にもバリデートを行う」方法
 →折角、ActionFormをsessionに格納してるのだから、
  バリデートは入力画面からのサブミットのみにしたい。

・確認画面からのサブミットのアクション定義にダミーのフォームを指定する。
 →BLogic-IOの<blogic-params>定義で、source属性にsessionにしても、
  明示的にActionForm名を指定できないので、×。




以上、宜しくお願いします。

メッセージ #78699 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: 入力画面&gt;確認画面&gt;完了画面におけるActionFormについて (2016-09-16 15:46 by itoumsf #78733)

ご質問のような実装をする場合、ご質問内容の対応策にも記載されている通り、
確認画面からのサブミット時にもバリデートを行なうことを推奨します。

入力画面→(バリデート1)→確認画面→(バリデート2)→(DB更新)→完了画面

何らかの理由により、サーバ側でのバリデートを一度で済ませたい場合、
次のような方法があります。

・入力画面後のバリデート1をクライアント側で行なう
 入力画面後のバリデート1をJavascriptなどを用いてクライアント側に実行させ、
 バリデート2のみをサーバ側でチェックすることで、
 サーバ側のバリデートを1度で済ませる事ができます。

 この時、両方のバリデーションルールが一致するものでなければ、
 ユーザビリティの低下を招く恐れがありますのでご注意ください。
 (ルールが等しくない場合、確認画面でのサブミットを何の不正もなく行ったにも関わらず、
  バリデーションエラーとなる場合があり、ユーザの混乱を招く可能性があります。)

特に理由のない場合は、前者の方法をおすすめします。
#78699 への返信

メッセージ #78733 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: 入力画面&amp;gt;確認画面&amp;gt;完了画面におけるActionFormについて (2016-09-16 21:20 by age-griever #78735)

ご教示、ありがとうございました。

ご推奨頂いた「確認画面からのサブミット時にもバリデートを行なう」を採用する方向で
検討したいと思います。

本件、クローズとさせてください。

#78733 への返信

メッセージ #78735 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする