Foren: Offene Diskussion (Thread #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名を指定できないので、×。




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

Reply to #78699×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden

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

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

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

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

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

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

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

Reply to #78733×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden

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

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

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

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

Reply to #78733

Reply to #78735×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden