• security CSRF漏洞保护


    一、CSRF概述

    跨站请求伪造或者一键式攻击通常缩写为csrf或者xsrf,通过挟持当前浏览器已经登录用户发送恶意请求的攻击烦方法

    xss利用用户对网站的信任

    csrf利用网站对用户浏览器的信任

    举例

    二、CSRF防御

    1、防御策略

    通过令牌同步模式 在每一次http请求中除了默认的cookie参数之外,服务端生成一个随机字符串称为csrf令牌,开启后httpsession保存一份, 前端请求到达时会将请求的csrf令牌信息和服务端对比 ,如果不相等则拒绝http请求

    考虑到网站可能放置外部链接,所以要求请求时幂等的 这样对于HEAD OPTIONS TRACE 等方法就没有必要使用CSRF令牌了 强行使用可能会导致令牌泄露

    2、传统web开发配置

    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
                    .anyRequest().authenticated()
                    .and()
                    .formLogin()
                    .and()
                    //开启csrf
                    .csrf();
        }
    }

    3、前后端分离配置

    默认是csrf是保存在服务端httpsession中,前后端分离中需要将生成csrf放入到cookie中 并在请求时获取cookie中令牌进行提交即可

    修改csrf放入到cookie

    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
                    .anyRequest().authenticated()
                    .and()
                    .formLogin()
                    .and()
                    //开启csrf
                    .csrf()
                    //将令牌保存到cookie 并且允许cookie前端获取
                    .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
        }
    }

    访问登录界面查看cookie

    发送请求携带令牌

    第一种:请求其他接口 在请求头中携带

    X-XSRF-TOKEN:cookie中得值

    第二种:请求参数中携带

    _csrf:cookie中得值
  • 相关阅读:
    Spring管理Bean(XML与注解方式)
    【QT】Qt 5 的程序:打印文档
    OpenAI Java SDK——chatgpt-java-v1.0.4更新支持GPT-3.5-Turbo,支持语音转文字,语音翻译。
    给 hugo 博客添加搜索功能
    计算S=a+aa+…+aa…a
    qt判断当前日期是不是当月的最后一天
    2019史上最全java面试题题库大全800题含答案(面试宝典)
    问题越古老,解决方案存在的时间就越长
    概率论重点笔记
    C# 简单封装异步Socket Server
  • 原文地址:https://blog.csdn.net/qq_34491508/article/details/126102523