CSRF

1.CSRF (Cross site request forgery)

跨站请求伪造,也被称为"OneClick Attack"或者Session Riding
通过伪造用户请求访问受信任站点的非法请求访问。
跨域:只要网络协议,ip 地址,端口中任何一个不相同就是跨域请求。
客户端与服务进行交互时,由于http协议本身是无状态协议,所以引入了cookie进行记录客户端身份
在cookie中会存放sessionid用来识别客户端身份的。
在跨域的情况下,sessionid可能被第三方恶意劫持,通过这个sessionid向服务端发起请求时,服务端会认为这个请求是合法的,可能发生很多意想不到的事情。
从Spring Security4开始CSRF防护默认开启。默认会拦截清求。进行CSRF处理。
CSRF为了保证不是其他第三方网站访问,要求访问时携带参数名为csrf 值为token(token在服务端产生)的内容,如果token和服务端的token匹配
成功,则正常访问。

2.简单使用

<form action="/login" method="post">
    <input type="hidden" name="_csrf" th:value="${_csrf.token}" th:if="${_csrf.token}">
    Username : <input type="text" name="username"><br>
    Password : <input type="password" name="password"><br>
    <input type="submit" value="login">
</form>
  • controller层方法
@GetMapping("/showLogin")
public String showLogin(){
    return "login";
}
  • 配置类
@Override
protected void configure(HttpSecurity http) throws Exception {

    http.formLogin()
            .loginPage("/showLogin")
            .loginProcessingUrl("/login")
            .successForwardUrl("/toIndex")
            .failureForwardUrl("/toError");

    http.authorizeRequests()
            .antMatchers("/css/**","js/**","**/*.png").permitAll()
            .antMatchers("/showLogin").permitAll()
            .antMatchers("/error.html").permitAll()
            .anyRequest().authenticated();

    //异常处理
    http.exceptionHandling()
                    .accessDeniedHandler(myAccessDeniedHandler);

//        http.csrf().disable();
}
posted @ 2023-01-18 14:56  lwx_R  阅读(20)  评论(0编辑  收藏  举报