2012-02-15 23 views
17

現時点では、私はCRSFトークンをSpring MVCとSpring Securityフォームに含めることを検討しています。 Spring Security + Spring MVCサーブレットとCSRFトークンのレンダリングと評価の両方をカバーする最も簡単なソリューションは何ですか?Spring 3.1 MVC、Spring Security 3.1 - CSRFトークン

この基本的な仕組みがスプリングスタックで利用できないことに私は驚いています。 (私はすべてのWebアプリケーションフレームワークの基本と考えています)

PS:私はHDIVを見てきましたが、Spring Securityでも使用するための解決策が見つかりません。 (例えば、ログインフォームはSpring MVCによってレンダリングされ、ログインリクエストはSpring Securityによって処理されます)

+0

を参照してください、春はそれをサポートしていません。しかし、何が問題なのですか? – Ralph

+0

疑問符が欠けていました。ごめんなさい。 Spring Security + Spring MVCとCSRF保護の両方をカバーするライブラリはありますか?あるいは、ユーザーが認証されている間CSRFだけが有害であるため、Spring MVCをカバーするには十分ですか? –

答えて

23

春3.1はRequestDataValueProcessorという名前の新しいインターフェイスを導入しました。このインターフェイスを使用すると、簡単に(自動的に - あなたのJSPまたはコントローラを変更することなく)CSRFトークンをHTTPフォームに登録できます。 hereの詳細な例を見ることができます。githubのサンプルコードも参照しています(アプリケーションから取り出してアプリケーションで使用することができます)。

8

更新:Spring Security 3.2にはCSRFトークン実装が含まれています。スプリングセキュリティ< = 3.1


CSRF春Secruity(認証&許可)の両方は、互いに別個に実装することが可能に関係して指摘しているので。

フィルタに基づいたCRSF実装がいくつかあります。 たとえば、Tomcat 7とTomcat 6.0に同梱されているものがあります。

私はそれらを使用しようとしましたが(2011年夏)、それはうまく動作していないと思います。 私は自分自身を実装しました。

EDIT(2012年4月):あなたは、フィルタ処理がより簡単になるように、その後Eyal Lupu's answerを見て、彼のBlogを持って、それはいくつかの春3.1の機能を使用しています春3.1を使用している場合、私の実装は、春3.0で動作します。

私はこれまでに公開していません(時間はありません)。しかし、あなたはそうするでしょう。あなたはそれをダウンロードすることができ (これは私が4shared.comを初めて使用され、私はそれが動作願っています):

私の実装の欠点は、あなたが必要とするということであり、 POST、DELETE、PUTを送信するすべてのフォームに明示的にトークンを追加します。

JSP(X):

xmlns:crsf="http://www.humanfork.de/tags/de/humanfork/security/crsf" 
... 
<form ...> 
    <crsf:hiddenCrsfNonce/> 
    .... 
</form> 

web.xmlの

<filter> 
    <filter-name>IdempotentCrsfPreventionFilter</filter-name> 
    <filter-class>de.humanfork.security.crsf.IdempotentCsrfPreventionFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>IdempotentCrsfPreventionFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
+0

ありがとうございました。 –

+2

Spring 3.1では、RequestDataValueProcessorというインターフェースを追加しました。 JSP Springフォームタグを使用していると仮定して、すべてのフォームを更新するために、それを実装してアプリケーションコンテキストでコンフィグレーションすることができます。 HDIVライブラリをSpring MVCと簡単に統合できるようにするためにこれを行いましたが、それはもちろん誰でも使用できます。 –

関連する問題