Spring Security 4 + CSRF(Springでのクロスサイトリクエストフォージェリから保護するプロジェクトを追加)





こんにちは

最新のWebアプリケーションは、 クロスサイトリクエストフォージェリ(CSRF)に対する保護が欠如している場合、脆弱であると見なされます。

Spring Security 4.xでは、デフォルトで有効になっているため、 Spring Security 3.xから4.x移行するときは、無効にする必要があります。

<http> ... <csrf disabled="true"/> </http>
      
      



または、より正確かつ確実にプロジェクトに追加します。



実際、10分間のビデオでそれを行いました。





プロジェクトでのCSRF実装の主なポイントは次のとおりです。



  1. 正しいHTTPリクエストを使用します。 デフォルトでは、CSRF保護はGET、HEAD、TRACE、OPTIONSリクエストでは使用できません 。 これは特に、ログアウトのために、悪意のあるサイトがアプリケーションで承認されたユーザーをログアウトしたくない場合、POSTリクエストが必要であることを意味します。

  2. サブミットがあるすべてのフォームで、値csrfTokenの隠しフィールド名= _csrfを追加します。 これを行う最も簡単な方法は、csrfが有効になっているバインディングと検証に加えて、フォームの必須の非表示フィールドに入力するSpringのフォームタグライブラリを使用することです。

     <%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %> ... <form:form method="post" ...> ... </form:form>
          
          





  3. Ajaxリクエストの場合、csrfトークンがヘッダーに追加されます。 そして、すべてのajaxリクエストに対してこれをすぐに行うことができます。

     <sec:csrfMetaTags />
          
          





     var token = $("meta[name='_csrf']").attr("content"); var header = $("meta[name='_csrf_header']").attr("content"); $(document).ajaxSend(function(e, xhr, options) { xhr.setRequestHeader(header, token); });
          
          





  4. 最後に、ステートレスRESTリクエストの最も簡単な保護方法は、JSON以外のPOST / PUT / DELETEを無効にすることです

     @RestController @RequestMapping(value = AdminRestController.REST_URL, consumes = MediaType.APPLICATION_JSON_VALUE)
          
          







最後に、トピックに関するいくつかのリンク:





ご清聴ありがとうございました。すでにプロジェクトにCSRF保護を実装したいと考えています。



All Articles