互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)

简介: 互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)

CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用也就是人们所知道的钓鱼网站。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

防御CSRF手段

解决方案:使用图形验证码 防止机器模拟接口请求攻击,在调用核心业务接口时,比如支付、下单、等接口,最好使用手机短信验证验证或是人脸识别,防止其他用户使用Token伪造请求。

下面来引申其它的一些知识 - - -> 使用Token机制,防止页面重复提交。

基于Token方式防止API接口幂等

需求

  • 业务要求:页面的数据只能被点击提交一次
  • 发生原因:由于重复点击或者网络重发,或者 nginx 重发等情况会导致数据被重复提交

解决办法

  • 集群环境:采用 token 加 redis(redis 单线程的,处理需要排队)
  • 单 JVM 环境:采用 token 加 redis 或 token 加 jvm 内存

处理流程

  • 数据提交前要向服务的申请 token,token 放到 redis 或 jvm 内存,token 有效时间 提交后后台校验 token,同时删除 token,生成新的 token 返回。
  • token 特点:要申请,一次有效性,可以限流

客户端每次在调用接口的时候,需要在请求头中,传递令牌参数,每次令牌只能用一次。

一旦使用之后,就会被删除,这样可以有效防止重复提交。

步骤:

  1. 生成令牌接口
  2. 接口中获取令牌验证

生成令牌接口:

public class TokenUtils {
  private static Map<String, Object> tokenMap = new ConcurrentHashMap<String, Object>();
  // 获取token
  public static synchronized String getToken() {
    // 1.生成令牌
    String token = "token-" + System.currentTimeMillis();
    // 2.存入tokenMap
    tokenMap.put(token, token);
    return token;
  }
  // 验证token,并且删除对应的token
  public static Boolean exisToken(String token) {
    // 1.从集合中获取token
    Object result = tokenMap.get(token);
    if (result == null) {
      return false;
    }
    // 2.删除对应的token
    tokenMap.remove(token);
    return true;
  }
}

接口中获取令牌验证:

@RestController
public class OrderController {
  @Autowired
  private OrderMapper orderMapper;
  // 获取Token
  @RequestMapping("/getToken")
  public String getToken() {
    return TokenUtils.getToken();
  }
  // 验证Token
  @RequestMapping(value = "/addOrder", produces = "application/json; charset=utf-8")
  public String addOrder(@RequestBody OrderEntity orderEntity, HttpServletRequest request) {
    String token = request.getHeader("token");
    if (StringUtils.isEmpty(token)) {
      return "参数错误!";
    }
    if (!TokenUtils.exisToken(token)) {
      return "请勿重复提交!";
    }
    int result = orderMapper.addOrder(orderEntity);
    return result > 0 ? "添加成功" : "添加失败" + "";
  }
}

总结

目录
相关文章
|
XML Web App开发 JSON
手把手教你实现一次 CSRF 攻击
之前写过一篇 CSRF 攻击文章,介绍了定义、触发方式、防御方式,但唯独没有给出一个实现方式,今天就借这篇文章重新写出一个实现方式
|
3月前
|
存储 人工智能 算法
102.大模型应用:差分隐私与大模型融合:数据隐私保护与模型效能的应用实践.102
本文系统阐述差分隐私(DP)如何破解大模型训练中的“数据不出库”与“模型需高质量数据”矛盾。通过在数据或梯度中添加可控噪声,DP在保障个体隐私(ε-δ严格可证)前提下,保留统计有效性,结合联邦学习实现医疗、金融等敏感场景的合规建模,兼顾隐私安全、数据可用与模型效能。
429 1
|
网络安全 数据安全/隐私保护
什么是 CSRF 攻击
CSRF(跨站请求伪造)攻击是指攻击者诱导用户点击恶意链接或提交表单,利用用户已登录的身份在目标网站上执行非授权操作,如转账、修改密码等。这种攻击通常通过嵌入恶意代码或链接实现。
|
存储 Web App开发 安全
如何防范 CSRF 攻击
CSRF(跨站请求伪造)攻击是一种常见的安全威胁。防范措施包括:使用Anti-CSRF Token、检查HTTP Referer、限制Cookie作用域、采用双重提交Cookie机制等,确保请求的合法性与安全性。
|
安全 前端开发 JavaScript
什么是 CSRF 攻击?如何启用 CSRF 保护来抵御该攻击?
什么是 CSRF 攻击?如何启用 CSRF 保护来抵御该攻击?
2298 5
|
Web App开发 人工智能 Android开发
iconfont.cn 阿里出品的矢量图标库
Iconfont.cn是阿里巴巴推出的矢量图标库,其中涵盖了1000多个常用图标,并在持续更新中。(目前已有7000+图标,部分图标为用户上传,因此默认不公开,但是可以搜索到。)
15414 0
iconfont.cn 阿里出品的矢量图标库
|
SQL IDE Java
MyBatis【问题 01】mapper传入array\collection\list类型的参数时报BindingException:Parameter ‘xx‘ not found问题复现及解决
MyBatis【问题 01】mapper传入array\collection\list类型的参数时报BindingException:Parameter ‘xx‘ not found问题复现及解决
1067 0
|
Ubuntu 安全
Ubuntu中遇到"无法创建临时文件"/tmp/..."在普通或root用户运行apt-get update时的错误解决办法
这些步骤当然不能涵盖所有可能出现问题的场合,但是能覆盖大多数常见的情景。希望这些信息能帮到你解决"无法创建临时文件"/tmp/..."这样的问题。不过,请记住,因为修改系统文件和目录的权限,清理临时文件,或者运行磁盘检查,都可能对系统造成影响,所以执行这些操作前要先确认这是安全的,必要时最好先做好数据备份。
966 10
|
前端开发 Java
SpringSecurity6从入门到实战之默认登录页面的生成
本文介绍了SpringSecurity在SpringBoot项目中如何自动生成默认登录页面的过程。当访问如`/hello`的受保护路由时,请求会经过多个过滤器。在AuthorizationFilter中,未认证的请求会被拦截并抛出AccessDeniedException。接着,ExceptionTranslationFilter捕获此异常并启动身份验证,调用LoginUrlAuthenticationEntryPoint的commence方法,重定向到/login。DefaultLoginPageGeneratingFilter拦截/login请求,生成并返回默认的登录页面。
|
开发工具 容器
解决报错:Couldn't create temporary file /tmp/apt.conf.IRqbCz
问题 操作容器应该是属于服务器开发同学的常规操作,经常我们会遇到系统缺少对应的工具的情况,比如我们进入容器后,想使用 vim 修改某个文件,但是发现该容器没有安装 vim 工具。这个时候,一般都需要自己手动安装,比如在 unbuntu 系统中,可以使用 apt-get 包管理命令。
1211 0
解决报错:Couldn't create temporary file /tmp/apt.conf.IRqbCz

热门文章

最新文章