クロスサイトリクエストフォージェリを実装したいStruts 1.xフレームワークに基づいたWebアプリケーションの防止。 Struts 2フレームワークがこれにトークンインターセプターを提供し、フィルターを使用して同様の機能を実装できることを知っています。
私はいくつかの考えについて少し混乱しています 1)どうすれば簡単な方法で一意のトークンを生成できますか? (この目的のために、重複したフォーム送信を回避するために使用されるActionクラストークンを使用できます)
CSRF防止のためのStruts 1.xフレームワークトークンメカニズムの使用に問題はありますか
回答:
回答№1の17Struts 1アクショントークンメソッドは次のように機能しますStruts 2トークンインターセプターは、セッションにトークンを追加し、フォーム送信時にトークンをチェックしますが、はるかに手動のプロセスです。基本的なワークフローは次のとおりです。
- ユーザーは(JSPに直接ではなく)Strutsアクションを介してフォームにアクセスします。 Strutsアクションは呼び出します
saveToken(request)
フォームを含むJSPに転送する前。 - JSPのフォームは、
<html:form>
タグ。 - フォームが送信するアクションは最初に呼び出されます
isTokenValid(request, true)
、最初のアクションに戻った場合は、エラーメッセージを付けて最初のアクションにリダイレクトする必要がありますfalse
。これにより、次のリクエストのトークンもリセットされます。
これを行うと、フォームの重複が防止されるだけではありませんただし、スクリプトは最初のStrutsアクションをヒットしてセッションを取得してから、2番目のStrutsアクションに送信してフォームを送信する必要があります。サイトは別のサイトのセッションを設定できないため、CSRFを防ぐ必要があります。
通常、ユーザーをJSPに直接送信する場合は、「t。」ではなく、から継承する新しいクラスを作成します ActionForward
これをそのままに設定します execute()
方法:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
saveToken(request);
return super.execute(mapping, form, request, response);
}