如何在Spring项目防止CSRF攻击

2023-05-16

什么是CSRF攻击?

CSRF就是跨站请求伪造攻击,怎么理解呢?

首先我们来理解cookie机制,就是当你登录某个网站,从后端接收的cookie会存到浏览器中,你下次访问该网站时浏览器会将属该网站的cookies带过去。

那么如果黑客编写了一个页面,将你登录过的网站接口链接放入该页面,那你点击访问黑客写的页面就会访问你登录过的那个网站,这时候浏览器会认为是你在访问该网站就将cookie带过去,则黑客访问成功。

下面有一个例子,有一个接口是Get方法

在启动另一个项目的页面,该页面如下,

只需一个img标签,里面链接为黑客想访问的链接,当你点击这个页面就会自动访问这个接口。

然后我们登录第一个项目的系统之后,然后点击编写好那个伪造请求页面。可以看到访问成功,这就是CSRF攻击,不需要获取你的cookie也可以伪造你的请求去访问。

这只是get方法类型,同样post类型也可以实现,只需要创建iframe标签通过表单提交,(document表单submit没有受到同源策略影响,所以可以提交)

下面是test1.html的内容

 

如何防范CSRF攻击

      我们来讲其中的一种方式,令牌验证。通俗地来讲,就后端给前端发一个令牌,每次调用接口时需要把令牌带上,后端进行验证,否则就调用失败。就是利用黑客的页面不能直接获取cookie的值,进行防御的一个机制。

     以下是详细过程:

      在登录接口设计发送令牌过程,令牌的值是一个随机值然后进行MD5散列得到一个字符串,通过保存到cookie发回给前端,需要设置httponly为false,不然前端的js获取不了该值。

 String authorization = HashStrUtil.hash(String.valueOf(authorizationNum), "MD5");
                session.setAttribute("authorization",authorization);
                Cookie cookie = new Cookie("authorization", authorization);
                cookie.setPath("/");
                cookie.setHttpOnly(false);
                servletResponse.addCookie(cookie);

  但是这样就不能防止XSS攻击获取cookie,然后再通过CSRF攻击,所以我们应该尽可能地把cookie的过期时间设置短一点,但也不是百分百安全,但攻破的条件已经很苛刻了。

 前端处置方式:

发送ajax请求调用后端接口时,需要带上cookie中的令牌。存在http请求的head部

$.ajax({
            type: "GET",
            dataType: "json",
            url: "user/getFriends",
            headers:{
                "authorization":getCookie("authorization")
            },
            success: 
})

后端进行验证:

 在Spring项目中我们创建一个拦截器,在调用接口时拦截,判断该请求是否带有令牌且与存在session的是否一致。

//判断该http请求 head首部是否带有authorization和是否与服务器存的一致,一致则通过
            String authorization = request.getHeader("authorization");
            String authorizationSession = (String) session.getAttribute("authorization");
            if (authorization != null && authorizationSession != null && authorization.equals(authorizationSession)) {
                return true;
            }else {
                return false;
            }

下面实验下效果:已经无法访问。

如果是http请求,黑客是可以通过抓包进行获取你的发送的请求,所以以上防范是基于https进行的。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Spring项目防止CSRF攻击 的相关文章

  • Neo4j 下载安装

    Neo4j 下载安装 Windows Neo4j community 新旧版本下载 旧版本在官网上已经找不到了 xff0c 新旧版本的区别在于登录是否需要密码 Windows Neo4j community 2 0 1及2 1 0 不需要密
  • 【libuv】1.44 windows构建

    uv a 作为一个独立的工程构建的 c 工程里c符号找不到 链接不过 Build started span class token punctuation span span class token operator span class
  • SEU健康申报+离校请假

    SEU健康申报 43 离校请假 Github源码 通过对源码的学习修改 xff0c 本程序稍作调整 xff0c 将健康申报 销假和请假模块分开 xff0c 目前可用 配置 chromedriver下载方法 xff0c 将下载的chromed
  • ValueError: Please provide model inputs as a list or tuple of 2 or 3 elements: (input, target)

    ValueError Please provide model inputs as a list or tuple of 2 or 3 elements input target 报错信息 Traceback span class toke
  • tensorflow checkout 的作用

    tensorflow checkout 的作用 参考链接如下 xff1a Tensorflow保存恢复模型及微调 网络模型的保存和读取 tensorflow训练保存的模型 模型文件夹中的文件主要为以下三类 xff1a checkpoint
  • afl-fuzz多线程

    afl fuzz多线程 afl fuzz多线程 https blog csdn net lesliegail1 article details 70209351 首先 xff0c 我们阅读这篇博客对afl fuzz单机多线程进行了解 我们了
  • 将同一文件夹下的大量文件根据设定分至多组

    将同一文件夹下的大量文件根据设定分至多组 需求分析 在recon文件夹下存在大量文件 xff0c 观察文件名 xff0c 我们设计将文件按照recon 后的第一个数字进行分组 xff0c 那么最终产生的文件夹应为0 1 11 编写程序 基于
  • CCF 202206-4 光线追踪 python

    CCF 202206 4 光线追踪 python CCF官网题目 此题因为运行超时得到了30分 xff0c 仅为没思路的同学提供一些想法 xff0c 如果有改进建议欢迎评论 xff01 题目分析 首先将反射镜转换为单独的反射点 xff0c
  • AutoEncoder及Variational AutoEncoder模型

    AutoEncoder及Variational AutoEncoder模型 一 AutoEncoder概述 作为一种无监督或者自监督算法 xff0c 自编码器本质上是一种数据压缩算法 从现有情况来看 xff0c 无监督学习很有可能是一把决定
  • CCF-CSP【202303-3 LDAP】C++

    CCF CSP 202303 3 LDAP C 43 43 CCF真题网址 第一次提交结果超时 只有20分 题目思路 我的思路较为简单 xff0c 即对于每个匹配表达式 xff0c 遍历N个用户 xff0c 验证是否匹配 对于每个表达式有两
  • 2的幂次方

    2的幂次方 判断一个数是否为2的幂次方 我们可以参考如下链接 xff1a 判断一个数是否为2的N次方 借鉴文中的分析 xff0c 我认为 xff1a 其实一个数n xff0c 如果是2的幂次方数 xff0c 则n的二进制原码中一定只有一个1
  • 爬虫1000+个C程序

    爬虫1000 43 个C程序 问题场景 由于实验需要 xff0c 我需要1000 43 个elf文件 xff0c 可是网络可获取的elf文件较少 xff0c c程序较多 xff0c 所以首先下载c程序 xff0c 之后gcc编译链接生成el
  • 【libuv】定时器:uv_timer_start 的timeout和repeat 参数

    花了好几个小时验证 uv timer start 发现怎么都是错误的 现象是 repeat 作为了timeout的效果 而且repeat 代表是毫秒级别的 按照原有设计 timeout是微秒 repeat的参数并不是timeout参数 而且
  • 解决IDEA Maven依赖下载总是失败的几种方法

    为啥我的IDEA Maven依赖下载总是失败 xff1f xff1f 我们本地使用 IDEA 运行 maven 项目的时候 xff0c 有时候运气不好 xff0c 就会遇到某些 maven 依赖无法正常找到 导入 这就会导致 IDEA 构建
  • 几种常见排序算法的实现及运行时间对比

    冒泡排序 function popSort arr if arr length lt 2 return arr let n 61 arr length while n gt 1 let exchanged 61 false for let
  • FtpClient切换、创建目录不成功的问题(makeDirectory、changeWorkingDirectory)

    FtpClient切换 创建目录不成功的问题 xff08 makeDirectory changeWorkingDirectory xff09 做功能时切换目录老是不成功且无法创建文件夹 xff0c 翻阅一些博客后发现Ftp创建目录只能逐级
  • RNA-seq数据上游分析流程(从原始数据开始)

    数据分析的基本思路 xff08 1 xff09 从ncbi的geo或者其它数据库中查找自己感兴趣的RNASeq数据 xff0c 至少要求给出如下信息 xff1a xff08 2 xff09 对芯片数据进行质量控制评价及处理 xff08 如果
  • R语言2——数据类型和基本运算

    R语言2 数据类型和基本运算 目录 R语言2 数据类型和基本运算 1 R的数据类型 1 R的数据类型 xff08 1 xff09 Logical xff08 逻辑型 xff09 xff1a 只有两个值TRUE FALSE xff08 2 x
  • 红芯对chromium,瞩目对zoom。扒扒瞩目客户端。

    0x00 前提 一直以来 xff0c 人们普遍怀疑瞩目等 国产 云会议系统在界面 xff0c 功能上有剽窃国外的Zoom us的嫌疑 xff0c 但无证据 本文从瞩目的Ubuntu客户端入手 xff0c 详细证明了瞩目的Zoom血统 0x0
  • Linux下微信终极解决方案(不是网页版/electronic wechat)

    文章目录 为什么有这篇文章 xff1f 所需工具本人环境步骤0x01 解压微信安装包0x02 安装 Wine制作启动器 目前发现的Bugs 为什么有这篇文章 xff1f 在Linux系统下 xff0c 微信的使用体验说实话很糟糕 为新网页版

随机推荐