[Seasar-user:21443] Re: [SAStruts] トランザクショントークンについての質問

riot-going-on [E-MAIL ADDRESS DELETED]
2012年 8月 31日 (金) 17:56:25 JST


太田様

ありがとうございます。

S2FormTagの拡張の件、調査致します。

また、事例の件ありがとうございます。
機能ごとにトークンのキーを分ける方法を独自実装されたという事ですね。
ソースを読ませて頂いた限りでは、こちらで上手くいきそうな気がします。
トークンの生成のみであればUUIDなどでも代用できそうですね。
ありがとうございます。

少し間が空いてしまうと思いますが、結果は後日ご報告させて頂きます。

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



2012年8月31日 17:30 太田浩一 <k_ohta @ nets-web.co.jp>:
> 太田といいます。
>
>> これについて、それぞれのActionから別のキーを指定してSessionに保存してトーク
>> ンチェックを行う方法は無いでしょうか。
>
> 固定のキーでトークンをHTMLに出力しているため、
> トークンのキーを変更するにはS2FormTagを更に拡張する必要がありそうです。
>
> 参照:
> org.apache.struts.taglib.html.FormTag#renderToken()
>
>
> 事例があっているか分かりませんが、
> 業務ごとにウィンドウを立ち上げて動作する仕様のアプリを作成する際、
> トークンの生成のみにTokenProcessorを使用して、
> 検証処理はForm毎に独自に実装していました。
>
> ↓のようなユーティリティメソッド群を整備しました。
>  (コメントは割愛しています)
>         public static String getToken(String tokenKey) {
>                 HttpServletRequest request = RequestUtil.getRequest();
>                 String token = TokenProcessor.getInstance().generateToken(request);
>                 request.getSession().setAttribute(tokenKey, token);
>                 return token;
>         }
>         public static boolean isTokenValid(String tokenKey, String token) {
>                 HttpServletRequest request = RequestUtil.getRequest();
>                 String sessionToken = (String) request.getSession().getAttribute(tokenKey);
>                 if (sessionToken != null && StringUtil.equals(sessionToken, token)) {
>                         return true;
>                 }
>                 return false;
>         }
>         public static void resetToken(String tokenKey) {
>                 HttpServletRequest request = RequestUtil.getRequest();
>                 request.getSession().removeAttribute(tokenKey);
>         }
>
>
> 以上、参考になりましたら幸いです。
>
>
>> こんにちは。
>>
>> トランザクショントークンについて質問です。
>>
>> 現在、SAStrutsにて複数の登録フォームが同時に運用されるアプリケーションを開発
>> しております。
>> ActionFormのスコープをセッションにして、パラメータを受け渡しております。
>>
>> その際にセッションフィクセーション対策、二重送信対策として、TokenProcessorの
>> トランザクショントークンを使用して対策としております。
>> この場合、Sessionのキーが
>>
>> "org.apache.struts.action.TOKEN"
>>
>> となると思いますが、先述の通り複数のフォームが同時に走るため、同一ブラウザで
>> 複数のフォームを立ち上げて並行して登録を進めた場合に、
>> トークンのSession値が上書きされてしまい、片方がエラー扱いになってしまいます。
>>
>> これについて、それぞれのActionから別のキーを指定してSessionに保存してトーク
>> ンチェックを行う方法は無いでしょうか。
>>
>> ユニークなキーの指定が不可能な場合、代替として考えられる機能はあるでしょうか。
>>
>> いずれも無理な場合は、登録フォームごとに独自のワンタイムトークンの処理を実装
>> する他ないのでしょうか。
>>
>> お分かりでしたら、お教えいただけると助かります。
>>
>> よろしくお願いいたします。
>> _______________________________________________
>> Seasar-user mailing list
>> Seasar-user @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
>
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


Seasar-user メーリングリストの案内