21

struts1.xフレームワークに基づくWebアプリケーションにクロスサイトリクエストフォージェリ防止を実装したいと思います。struts 2フレームワークがこのためのトークンインターセプターを提供し、フィルターを使用して同様の機能を実装できることを知っています。

私はいくつかの考えについて少し混乱しています1)簡単な方法で一意のトークンを生成するにはどうすればよいですか?(この目的でアクションクラストークンを使用できますか?これは、フォームの重複送信を回避するために使用されます)

CSRF防止のためのstruts1.xフレームワークトークンメカニズムの使用に問題はありますか

4

1 に答える 1

19

Struts 1アクショントークンメソッドは、セッションにトークンを追加してフォーム送信時にチェックするという点でStruts 2トークンインターセプターと同じように機能しますが、はるかに手動のプロセスです。基本的なワークフローは次のとおりです。

  1. ユーザーは、Strutsアクションを介してフォームにアクセスします(JSPに直接アクセスするのではありません)。StrutsアクションsaveToken(request)は、フォームを含むJSPに転送する前に呼び出します。
  2. JSPのフォームは<html:form>タグを使用する必要があります。
  3. フォームが送信するアクションは最初にを呼び出します。isTokenValid(request, true)最初のアクションが返される場合は、エラーメッセージを表示して最初のアクションにリダイレクトする必要がありますfalse。これにより、次のリクエストのトークンもリセットされます。

これを行うと、フォームの重複送信を防ぐだけでなく、スクリプトを2番目のStrutsアクションに送信してフォームを送信する前に、スクリプトは最初のStrutsアクションを実行してセッションを取得する必要があります。サイトは別のサイトのセッションを設定できないため、これによりCSRFが防止されます。

通常、ユーザーを直接JSPに送信する場合は、送信しないでください。代わりに、から継承する新しいクラスを作成し、ActionForwardこれをexecute()メソッドとして設定します。

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)  throws Exception {
    saveToken(request);
    return super.execute(mapping, form, request, response);
}
于 2011-03-17T13:05:19.150 に答える