SprigSecurityを使ってCSRF攻撃を処理する方法ステップ
2167 ワード
CSRFホール現状
CSRF(Cross-site request forgery)は駅をまたいで偽造を要求して、One Clik AttackあるいはSession Ridingとも言われています。通常はCSRFまたはXSRFと略されています。ウェブサイトへの悪用です。クロスステーションスクリプト(XSS)のように聞こえるが、XSSとは非常に違って、XSSはサイト内の信頼ユーザを利用し、CSRFは信頼されたユーザの要求を装うことによって信頼されたウェブサイトを利用する。XSS攻撃に比べて、CSRF攻撃はあまり流行しない傾向があります。(そのため、防衛する資源もかなり少ないです。)防止しにくいので、XSSより危険性が高いと考えられています。
CSRFはウェブブラウザに依存する、混淆された代理人攻撃である。
POM依存
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}");
}
});
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。