私はWebアプリケーションのCSRF保護を実装する方法を究明しようとしています。私は数多くのページを読んだことがありますが、私の特定の状況で解決策を決めることはできません。サーバーからAngularJSクライアントへのCSRFトークンの交換
まず、WebアプリケーションはAngularで書かれ、Apacheサーバーに静的にデプロイされます。これは、アプリケーションサーバー上の戦争で展開された、サーバー上のJava型のサービスを呼び出します。両方とも同じドメインに配置されています。認証後、通常のセッションCookie(secure + HttpOnly)が応答に設定されます。
シンクロナイザトークンまたはダブルサブミットクッキーパターンに基づいてCSRF保護を実装したいと思います(ただし、サーバー側で状態を処理できるため、最初の方が優れたソリューションです)。
私が見たソリューションのほとんどは、トークンサーバー側を生成し、クライアント側でアクセスできるようにクッキーに格納することを提案しています。これがうまくいくための制約、そして私はそれが大きなものだと思います.Javascriptがアクセスできないので、クッキーはHttpOnlyにできません。さらに、私は完全に保護されていないクッキーでトークンを共有することは良い考えではないと感じています。しかし、それはAngularJSから推奨される解決策だと思われます...
私はこのソリューションを捨てると何が残っていますか? トークンをクッキーに入れるのではなく、応答ヘッダーに入れる?それは安全ですか? サービスを公開してトークンを取得しますか?実用的だが、それが良い考えであるかどうかわからない? OWASP Guardのように、トークンを提供するためにJavascriptを構築するサーブレットを公開しますか? 他に何か?
EDIT:解決策として、HTTPレスポンスでトークン名と値を注入しようとしているようです。
ありがとうございました!
はい、そのすべてがクリアされています。私が間違っているのは、サーバー側で生成されたクッキーを安全かつクリーンな方法でクライアントに転送する方法です。 – Xendar
Java EEアプリケーションは、要求属性としてトークンをクライアントに戻します。 AngularJSクライアントの場合は、JSON – Vel
を使用してトークンを渡すことができます。つまり、ログイン応答の一環として使用しますか? – Xendar