こんにちは
最新のWebアプリケーションは、 クロスサイトリクエストフォージェリ(CSRF)に対する保護が欠如している場合、脆弱であると見なされます。
Spring Security 4.xでは、デフォルトで有効になっているため、 Spring Security 3.xから4.xに移行するときは、無効にする必要があります。
<http> ... <csrf disabled="true"/> </http>
または、より正確かつ確実にプロジェクトに追加します。
実際、10分間のビデオでそれを行いました。
プロジェクトでのCSRF実装の主なポイントは次のとおりです。
- 正しいHTTPリクエストを使用します。 デフォルトでは、CSRF保護はGET、HEAD、TRACE、OPTIONSリクエストでは使用できません 。 これは特に、ログアウトのために、悪意のあるサイトがアプリケーションで承認されたユーザーをログアウトしたくない場合、POSTリクエストが必要であることを意味します。
- サブミットがあるすべてのフォームで、値csrfTokenの隠しフィールド名= _csrfを追加します。 これを行う最も簡単な方法は、csrfが有効になっているバインディングと検証に加えて、フォームの必須の非表示フィールドに入力するSpringのフォームタグライブラリを使用することです。
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %> ... <form:form method="post" ...> ... </form:form>
- 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); });
- 最後に、ステートレスRESTリクエストの最も簡単な保護方法は、JSON以外のPOST / PUT / DELETEを無効にすることです
@RestController @RequestMapping(value = AdminRestController.REST_URL, consumes = MediaType.APPLICATION_JSON_VALUE)
最後に、トピックに関するいくつかのリンク:
ご清聴ありがとうございました。すでにプロジェクトにCSRF保護を実装したいと考えています。