互联网并发与安全系列教程(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 ? "添加成功" : "添加失败" + "";
  }
}

总结

目录
相关文章
|
10月前
|
安全 测试技术 程序员
web渗透-文件包含漏洞
文件包含漏洞源于程序动态包含文件时未严格校验用户输入,导致可加载恶意文件。分为本地和远程包含,常见于PHP,利用伪协议、日志或session文件可实现代码执行,需通过合理过滤和配置防范。
1427 79
web渗透-文件包含漏洞
|
10月前
|
存储 安全 前端开发
Web渗透-文件上传漏洞-上篇
文件上传漏洞常见于Web应用,因类型限制不严可致恶意文件执行。本文介绍前端检测、MIME类型、黑名单、.htaccess、空格、双写等多种绕过方式,并结合upload-labs靶场演示利用方法,提升安全防护认知。
3115 1
Web渗透-文件上传漏洞-上篇
|
10月前
|
安全 中间件 应用服务中间件
WEB渗透-文件上传漏洞-下篇
本文详解文件上传安全漏洞,涵盖白名单绕过(如00截断、条件竞争)、图片木马制作与利用、以及IIS、Apache、Nginx等常见解析漏洞原理与防御。结合实战案例,深入剖析攻击手法与修复方案。
809 1
|
10月前
|
存储 JavaScript 安全
Web渗透-XSS漏洞深入及xss-labs靶场实战
XSS(跨站脚本攻击)是常见的Web安全漏洞,通过在网页中注入恶意脚本,窃取用户信息或执行非法操作。本文介绍其原理、分类(反射型、存储型、DOM型)、测试方法及xss-labs靶场实战案例,帮助理解与防御XSS攻击。
3004 1
Web渗透-XSS漏洞深入及xss-labs靶场实战
|
10月前
|
安全 NoSQL Shell
web渗透-SSRF漏洞及discuz论坛网站测试
SSRF(服务器端请求伪造)是一种安全漏洞,攻击者可诱使服务端发起任意请求,进而探测或攻击内网系统。常用于端口扫描、访问内部服务、读取本地文件等。常见防御包括限制协议、域名和IP,但可通过302跳转、短地址等方式绕过。
527 1
web渗透-SSRF漏洞及discuz论坛网站测试
|
9月前
|
安全 Linux iOS开发
Burp Suite Professional 2025.10 发布 - Web 应用安全、测试和扫描
Burp Suite Professional 2025.10 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
588 3
|
10月前
|
安全 程序员 数据库连接
web渗透-CSRF漏洞
CSRF(跨站请求伪造)是一种常见的Web安全漏洞,攻击者通过伪造用户请求,诱使其在已登录状态下执行非意愿操作。本文介绍CSRF原理、分类(站外与站内)、DVWA靶场搭建及防御措施,如同源策略与Token验证,提升安全防护意识。
716 0
web渗透-CSRF漏洞
|
10月前
|
安全 Linux PHP
Web渗透-命令执行漏洞-及常见靶场检测实战
命令执行漏洞(RCE)指应用程序调用系统命令时,用户可控制输入参数,导致恶意命令被拼接执行,从而危害系统安全。常见于PHP的system、exec等函数。攻击者可通过命令连接符在目标系统上执行任意命令,造成数据泄露或服务瘫痪。漏洞成因包括代码层过滤不严、第三方组件缺陷等。可通过参数过滤、最小权限运行等方式防御。本文还介绍了绕过方式、靶场测试及复现过程。
2005 0
|
安全 前端开发 JavaScript
什么是 CSRF 攻击?如何启用 CSRF 保护来抵御该攻击?
什么是 CSRF 攻击?如何启用 CSRF 保护来抵御该攻击?
2273 5
|
存储 Web App开发 安全
如何防范 CSRF 攻击
CSRF(跨站请求伪造)攻击是一种常见的安全威胁。防范措施包括:使用Anti-CSRF Token、检查HTTP Referer、限制Cookie作用域、采用双重提交Cookie机制等,确保请求的合法性与安全性。