SprigSecurityを使ってCSRF攻撃を処理する方法ステップ


CSRFホール現状
CSRF(Cross-site request forgery)は駅をまたいで偽造を要求して、One Clik AttackあるいはSession Ridingとも言われています。通常はCSRFまたはXSRFと略されています。ウェブサイトへの悪用です。クロスステーションスクリプト(XSS)のように聞こえるが、XSSとは非常に違って、XSSはサイト内の信頼ユーザを利用し、CSRFは信頼されたユーザの要求を装うことによって信頼されたウェブサイトを利用する。XSS攻撃に比べて、CSRF攻撃はあまり流行しない傾向があります。(そのため、防衛する資源もかなり少ないです。)防止しにくいので、XSSより危険性が高いと考えられています。
CSRFはウェブブラウザに依存する、混淆された代理人攻撃である。
POM依存

<!--      freemarker -->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!-- Security (   CSRF  ) -->
<dependency>
 <groupId>org.springframework.security</groupId>
 <artifactId>spring-security-web</artifactId>
</dependency>
フィルタの設定

@SpringBootApplication
public class Application {

 public static void main(String[] args) {
  SpringApplication.run(Application.class, args);
 }
 
 /**
  *   CSRF   
  *
  * @return {@link org.springframework.boot.web.servlet.FilterRegistrationBean}
  */
 @Bean
 public FilterRegistrationBean<CsrfFilter> csrfFilter() {
  FilterRegistrationBean<CsrfFilter> registration = new FilterRegistrationBean<>();
  registration.setFilter(new CsrfFilter(new HttpSessionCsrfTokenRepository()));
  registration.addUrlPatterns("/*");
  registration.setName("csrfFilter");
  return registration;
 }
}
form要求にCSRFの隠しフィールドを追加します。

<input name="${(_csrf.parameterName)!}" value="${(_csrf.token)!}" type="hidden" />
AJAX要求にheaderヘッダを追加する

xhr.setRequestHeader("${_csrf.headerName}", "${_csrf.token}");
jQueryのAjaxグローバル配置

jQuery.ajaxSetup({
 "beforeSend": function (request) {
  request.setRequestHeader("${_csrf.headerName}", "${_csrf.token}");
 }
});
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。