2016-12-02 25 views
2

最新のSpring BootでCSRF保護を実装しようとしました。 インターネット上のすべての例は、私が必要としないユーザーのログインと認証に基づいています。Spring Boot CSRF

私のサイトには認証が必要なセクションはありません。 (にもかかわらず、私は必要ありません)

application.propertiesに定義されたユーザ - - アプリケーションは_csrf.tokenを作成 私は

1) Rest requests come from within site. No direct request from outside with wget to be allowed.

2) All pages (routes) must be requested from the index page (/)

pom.xml

<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-security</artifactId> 
</dependency> 

におけるセキュリティの依存関係を含またいです。

- 「configure」メソッドオーバーライドを使用してWebSecurityConfigurerAdapterを拡張して作成されたクラス。

"configure"ですべてのフィルタを試しました。それは動作しませんでしたし、最終的にそれを空白のままにした

問題は、Wgetがapiページを直接取得できることです。 それを防ぐには?

+0

私はあなたが暗黙の許可を持っている必要がありますので、あなたには、いくつかの認証なしでここで言っていることができないかなり確信しています。私はあなたがこれを読んだことがあると確信しています。http://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.htmlアプリでは、ブラウザ以外の項目に対してCSRFを特に無効にする必要があるので、動作させる必要があります。働くべきであると思う最高の構成とクラスを投稿してください。 GitHubの例が最も簡単かもしれません。 –

答えて

1

私はすぐに一緒にこの構成のPOCを入れている:

@Configuration 
@EnableWebSecurity 
@SpringBootApplication 
public class StackoverflowQ40929943Application extends WebSecurityConfigurerAdapter{ 

    public static void main(String[] args) { 
     SpringApplication.run(StackoverflowQ40929943Application.class, args); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
       .authorizeRequests() 
        .antMatchers("/**").permitAll(); 
    } 

} 

その要旨を春ブーツ+セキュリティが自動的にすべてのエンドポイントを確保しますです。ここでは、すべてのエンドポイントに要求を明示的に許可します。しかし、Spring Boot + Securityは、有効にしておいたままの状態で、自動的にCSRFを設定します。したがって、あなたは両方の世界のベストを得ます。

注記:必要に応じて、この設定をさらに詳細化する必要があります。

Full Example on GitHub

+0

Tks。 yrコードをテストしました。 POST要求が/ endpointに直接行われたときに動作します。 正当には、POST要求に_csrfフィールドが含まれていないと、エラーが発生します(ステータス= 403)。 要求パラメータ '_csrf'またはヘッダー 'X-CSRF-TOKEN'でCSRFトークン '4afa89cc'が無効です。< ただし、エンドポイントコントローラは制御なしでGET要求に応答します。 リクエストに間違った 'X-CSRF-TOKEN'または '_csrf'ヘッダーを追加しても。 アプリはGETのための上記のエラーで応答する必要があります。アプリケーションからの着信ではありません。 GET URLに_csrfを追加するか、WebSecurityConfigurerAdapterフィルターを追加すると可能です。 – user3687431

+0

GET要求は読み取り専用であるため、有害ではないと推定されるため、GET要求はデフォルトのCSRF保護の対象外です。提案したようにカスタム設定で追加することもできます。 –