Struts1.xフレームワークに基づくWebアプリケーションにクロスサイトリクエストフォージェリ防止を実装したいと思います。 struts 2フレームワークがこのためのトークンインターセプターを提供し、フィルターを使用して同様の機能を実装できることを知っています。
私はいくつかの考えについて少し混乱しています1)簡単な方法で一意のトークンを生成する方法は? (フォームの重複送信を回避するために使用されるこの目的でアクションクラストークンを使用できますか)
CSRF防止のためのstruts1.xフレームワークトークンメカニズムの使用に問題はありますか
Struts 1アクショントークンメソッドは、セッションにトークンを追加してフォーム送信時にチェックするという点でStruts 2トークンインターセプターと同じように機能しますが、はるかに手動のプロセスです。基本的なワークフローは次のとおりです。
saveToken(request)
を呼び出します。<html:form>
_タグを使用する必要があります。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);
}
_