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();
}
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号