当前位置: 首页 > news >正文

网络空间安全(54)CSRF

一、定义与原理

        CSRF(Cross-Site Request Forgery),全称为跨站请求伪造,也被称为One Click Attack或Session Riding,缩写为CSRF或XSRF。它是一种网络安全漏洞,攻击者通过伪造用户的请求,利用用户在已登录的情况下的身份验证信息,向服务器发送恶意请求,从而执行未经用户授权的操作。

       CSRF攻击的核心在于诱导受害者访问一个包含恶意代码的网页,该恶意代码会构造一个伪造的请求,然后利用受害者的浏览器向第三方网站发送。由于这个请求是来自于受害者的浏览器,且通常已经通过了认证,所以第三方网站会误认为这是受害者的合法请求并予以执行。

二、攻击方式

  1. 伪造表单提交:攻击者构造一个包含恶意表单的网页,当受害者访问该网页时,表单会自动提交,导致受害者的账户被恶意操作。
  2. GET请求劫持:攻击者将恶意链接隐藏在图片、链接等元素中,诱导受害者点击。当受害者点击链接时,浏览器会发送一个GET请求,导致受害者的账户被恶意操作。
  3. POST请求伪造:攻击者可以通过在一个不可见的iframe窗口中构造一个form表单,并使用JavaScript自动提交这个表单,从而伪造用户的POST请求。

三、危害

1.未经用户授权修改用户的账户信息。

2.执行敏感操作,如转账、删除数据等。

3.在用户不知情的情况下订阅服务或购买商品。

四、防御措施

  1. 使用CSRF令牌:为每个敏感操作生成唯一的CSRF令牌,并在表单提交时验证该令牌的有效性。这样可以确保只有来自合法来源的请求才能被处理。
  2. 检查Referer头:虽然Referer头可以被伪造,但在大多数情况下,它仍然是一个有效的防御手段。通过检查Referer头,可以确保请求来自预期的来源。
  3. 使用SameSite Cookie属性:将Cookie的SameSite属性设置为Strict或Lax,限制跨站点请求携带Cookie。这可以减少CSRF攻击的风险,因为攻击者通常无法跨站点发送包含用户Cookie的请求。
  4. 双重提交Cookie:在每个请求中,同时通过Cookie和请求参数提交一个相同的token,服务器端验证两者是否一致。这种方法可以增加攻击的难度,因为攻击者需要同时伪造Cookie和请求参数中的token。
  5. 避免使用GET请求进行敏感操作:GET请求容易被攻击者利用来构造恶意链接,因此应尽量避免使用GET请求进行敏感操作。相反,应使用POST请求,并在请求中包含CSRF令牌等验证信息。
  6. 安全框架和库:使用安全框架和库,如Spring Security等,它们通常内置了CSRF防护机制,可以自动为敏感操作生成和验证CSRF令牌。

五、示例

      以Spring Security为例,它默认启用了CSRF保护。开发者可以通过配置类来启用或禁用CSRF保护,并自定义CSRF令牌的生成和验证逻辑。例如,以下代码展示了如何在Spring Security中启用CSRF保护:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().and().authorizeRequests().antMatchers("/").permitAll().anyRequest().authenticated();
    }
}

总结

       CSRF攻击是一种常见的网络攻击方式,对用户的隐私和财产安全构成严重威胁。为了防御CSRF攻击,开发者需要深入了解其原理和危害,并采取有效的防护措施。通过使用CSRF令牌、检查Referer头、使用SameSite Cookie属性、双重提交Cookie等方法,可以大大降低CSRF攻击的风险。同时,开发者还应定期更新和修补Web应用,以确保其安全性得到及时修复和提升。

 结语       

你生而有翼

为何竟愿一生匍匐前进

???


文章转载自:
http://caviar.gbfuy28.cn
http://centistere.gbfuy28.cn
http://abrase.gbfuy28.cn
http://adsorbability.gbfuy28.cn
http://aieee.gbfuy28.cn
http://armband.gbfuy28.cn
http://acquittal.gbfuy28.cn
http://anile.gbfuy28.cn
http://cesspipe.gbfuy28.cn
http://anicut.gbfuy28.cn
http://ankerite.gbfuy28.cn
http://ardently.gbfuy28.cn
http://chaldaea.gbfuy28.cn
http://archibald.gbfuy28.cn
http://autarkist.gbfuy28.cn
http://agnate.gbfuy28.cn
http://airpark.gbfuy28.cn
http://bloodroot.gbfuy28.cn
http://canaille.gbfuy28.cn
http://bashful.gbfuy28.cn
http://acrophobe.gbfuy28.cn
http://chemurgy.gbfuy28.cn
http://analogize.gbfuy28.cn
http://candor.gbfuy28.cn
http://angico.gbfuy28.cn
http://animalization.gbfuy28.cn
http://cheezit.gbfuy28.cn
http://bacilli.gbfuy28.cn
http://banality.gbfuy28.cn
http://aeromechanics.gbfuy28.cn
http://www.dtcms.com/a/122466.html

相关文章:

  • 边缘计算盒子是什么?
  • Dify教程01-Dify是什么、应用场景、如何安装
  • 解决python manage.py shell ModuleNotFoundError: No module named xxx
  • OCR之行驶证识别
  • 【MySQL】——详解事务
  • 多账户使用Github的场景,设置 SSH 多账号使用特定 key
  • MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
  • Pytorch查看神经网络结构和参数量
  • MongoDB 新手笔记
  • GitHub优秀项目:数据湖的管理系统LakeFS
  • 42、JavaEE高级主题:WebSocket详解
  • linux入门四:Linux 编译器
  • leetcode_面试题 02.07. 链表相交_java
  • Interactron: Embodied Adaptive Object Detection(训练时进行更新参数) 还没看懂
  • 金融数据分析(Python)个人学习笔记(7):网络数据采集以及FNN分类
  • React八案例上
  • Seq2Seq - 编码器(Encoder)和解码器(Decoder)
  • Linux系统安全及应用
  • Spring AI Alibaba MCP 市场正式上线!
  • spark安装过程问题
  • CSS 定位属性的生动比喻:以排队为例理解 relative 与 absolute
  • HP EVA SAN 的基础知识及常见数据丢失问题
  • 【nnUNetv2进阶】二十九、nnUNetv2 魔改网络-小试牛刀-引入RCM(Rectangular Self-Calibration Module)
  • Mybatis操作数据库
  • 8. git branch
  • spring mvc 异常处理中@RestControllerAdvice 和 @ControllerAdvice 对比详解
  • Linux服务器——Samba服务器
  • 【C++编程基础-关键字】:constexpr和const
  • Vue3服务端渲染实战:Nuxt3深度解析与高性能SSR架构设计
  • vLLM实战:多机多卡大模型分布式推理部署全流程指南