Node中的CSRF攻击和防御

Node中的CSRF攻击和防御

假设有一个网上银行系统,用户可以通过该系统进行转账操作。转账功能的URL可能是这样的:

js 复制代码
https://www.bank.com/transfer?toAccount=123456&amount=1000

当用户登录到银行系统,并在浏览器中访问这个URL时,银行系统会执行转账操作,将1000元转入账户123456。

CSRF攻击过程:

  1. 受害者登录 :用户Alice登录到她的网上银行账户(比如www.bank.com)。

  2. 攻击者准备攻击页面 :攻击者Eve创建了一个恶意网站www.evil.com,并在该网站上嵌入了一段HTML代码或JavaScript代码,试图利用CSRF漏洞:

    html 复制代码
    <img src="https://www.bank.com/transfer?toAccount=999999&amount=1000" style="display:none">

    或者通过JavaScript发送请求:

    javascript 复制代码
    var img = new Image();
    img.src = "https://www.bank.com/transfer?toAccount=999999&amount=1000";
  3. 受害者访问恶意网站:当Alice在已经登录银行系统的情况下,访问了Eve的恶意网站,浏览器会自动执行页面中的代码,发送一个请求到银行系统。

  4. 请求执行:因为Alice已经在银行系统中登录,浏览器会带上Alice的会话Cookie。这时,银行系统收到请求后,会认为这是一个合法的请求,并执行转账操作,将1000元转入攻击者的账户999999。

防御措施:

  • 设置后端的cookie 禁止跨域携带cookie 我们只需要把cookie设置的 SameSite:Strict即可;
  • 验证 referer和Origin 每个页面都会带这哥俩 通过验证这哥俩也就可以了
  • 使用token 每一次请求都带token
  • 使用验证码 要求用户进行敏感操作的时候 填写验证码
  • 表单随机数(这种做法是在服务端渲染的时候用)
    • 1.生成一个随机数放到 session中
    • 2.生成页面时,表单中加入一个隐藏的表单域 : <input type="hidden" name:"Hash" value="<%=session['key']%>">
    • 3.服务端 进行验证随机数
    • 4.清除session中的随机数
  • 二次验证,比如要求用户获取验证码进行验证
相关推荐
漂流瓶jz3 小时前
Webpack如何实现万物皆可import?loader的使用/配置/手写实践
前端·javascript·webpack
ZC跨境爬虫3 小时前
跟着 MDN 学CSS day_41:显式轨道、隐式网格与区域命名放置
前端·javascript·css·ui·交互
稳联技术老娜4 小时前
DeviceNet主站怎么连接西门子PLC,Profinet网关配置手册(那智机器人)
服务器·网络·数据库
修己xj4 小时前
告别手动存图!这款叫 Fatkun 的浏览器插件,简直是素材收集神器
前端
袋鼠云数栈5 小时前
从前端到基础设施,ACOS 如何打通企业全链路可观测
运维·前端·人工智能·数据治理·数据智能
AskHarries5 小时前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
Moment5 小时前
长上下文会最终杀死 Rag 吗?
前端·javascript·后端
志栋智能6 小时前
AI驱动无代码:降低巡检超自动化的门槛
大数据·运维·网络·人工智能·自动化
专业机床数据采集6 小时前
C# 精雕数控 数据采集 Demo|实时读取精雕机床坐标、主轴、负载、加工工时全量参数
网络·网络协议·tcp/ip·mes·精雕数控数据采集
qcx236 小时前
【系统学AI】25 论文导读 ①:两篇改变 AI 的开山之作——Attention Is All You Need & ReAct
前端·人工智能·react.js·transformer