ダウンロード
Magazine
開発
アカウント
ダウンロード
Magazine
開発
ログイン
アカウント/パスワードを忘れた
アカウント作成
言語
ヘルプ
言語
ヘルプ
×
ログイン
ログイン名
パスワード
×
アカウント/パスワードを忘れた
日本語の翻訳状況
カテゴリ:
ソフトウェア
人物
PersonalForge
Magazine
Wiki
検索
OSDN
>
ソフトウェアを探す
>
システム
>
TERASOLUNA Framework
>
フォーラム
>
公開討議
>
入力画面>確認画面>完了画面におけるActionFormについて
TERASOLUNA Framework
概要
プロジェクト概要
開発ダッシュボード
Webページ
開発メンバー
画像ギャラリー
公開フィード一覧
活動
統計情報
活動履歴
検索キーワード
プロジェクトレビュー
ダウンロード
リリース一覧
統計
ソースコード
コードリポジトリリスト
Subversion
リポジトリ閲覧
チケット
チケット一覧
マイルストーン一覧
チケットの種類一覧
コンポーネント一覧
よく使われるチケット一覧のリスト/RSS
新規チケット登録
文書
Wiki
FrontPageの表示
ページ一覧
最近の更新
文書マネージャ
文書一覧
コミュニケーション
フォーラム
フォーラム一覧
公開討議 (1265)
メーリングリスト
MLの一覧
terasoluna-information
ニュース
フォーラム:
公開討議
(スレッド #38028)
話題(スレッド)一覧に戻る
RSS
入力画面>確認画面>完了画面における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 への返信
×
題名
本文
メッセージ #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名を指定できないので、×。 > > > > > 以上、宜しくお願いします。
Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。
ログインする
ニックネーム
プレビュー
投稿
キャンセル
Re: 入力画面>確認画面>完了画面におけるActionFormについて (2016-09-16 15:46 by
itoumsf
#78733)
返信
チケットに引用
ご質問のような実装をする場合、ご質問内容の対応策にも記載されている通り、
確認画面からのサブミット時にもバリデートを行なうことを推奨します。
入力画面→(バリデート1)→確認画面→(バリデート2)→(DB更新)→完了画面
何らかの理由により、サーバ側でのバリデートを一度で済ませたい場合、
次のような方法があります。
・入力画面後のバリデート1をクライアント側で行なう
入力画面後のバリデート1をJavascriptなどを用いてクライアント側に実行させ、
バリデート2のみをサーバ側でチェックすることで、
サーバ側のバリデートを1度で済ませる事ができます。
この時、両方のバリデーションルールが一致するものでなければ、
ユーザビリティの低下を招く恐れがありますのでご注意ください。
(ルールが等しくない場合、確認画面でのサブミットを何の不正もなく行ったにも関わらず、
バリデーションエラーとなる場合があり、ユーザの混乱を招く可能性があります。)
特に理由のない場合は、前者の方法をおすすめします。
#78699
への返信
メッセージ #78733 への返信
×
題名
本文
メッセージ #78733 への返信 > ご質問のような実装をする場合、ご質問内容の対応策にも記載されている通り、 > 確認画面からのサブミット時にもバリデートを行なうことを推奨します。 > > 入力画面→(バリデート1)→確認画面→(バリデート2)→(DB更新)→完了画面 > > 何らかの理由により、サーバ側でのバリデートを一度で済ませたい場合、 > 次のような方法があります。 > > ・入力画面後のバリデート1をクライアント側で行なう > 入力画面後のバリデート1をJavascriptなどを用いてクライアント側に実行させ、 > バリデート2のみをサーバ側でチェックすることで、 > サーバ側のバリデートを1度で済ませる事ができます。 > > この時、両方のバリデーションルールが一致するものでなければ、 > ユーザビリティの低下を招く恐れがありますのでご注意ください。 > (ルールが等しくない場合、確認画面でのサブミットを何の不正もなく行ったにも関わらず、 > バリデーションエラーとなる場合があり、ユーザの混乱を招く可能性があります。) > > 特に理由のない場合は、前者の方法をおすすめします。
Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。
ログインする
ニックネーム
プレビュー
投稿
キャンセル
Re: 入力画面&gt;確認画面&gt;完了画面におけるActionFormについて (2016-09-16 21:20 by
age-griever
#78735)
返信
チケットに引用
ご教示、ありがとうございました。
ご推奨頂いた「確認画面からのサブミット時にもバリデートを行なう」を採用する方向で
検討したいと思います。
本件、クローズとさせてください。
#78733
への返信
メッセージ #78735 への返信
×
題名
本文
メッセージ #78735 への返信 > ご教示、ありがとうございました。 > > ご推奨頂いた「確認画面からのサブミット時にもバリデートを行なう」を採用する方向で > 検討したいと思います。 > > 本件、クローズとさせてください。 >
Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。
ログインする
ニックネーム
プレビュー
投稿
キャンセル