前端如何预防CSRF

阻⽌不明外域的访问:

同源检测 、Samesite Cookie

提交时要求附加本域才能获取的信息:

CSRF Token 、双重Cookie验证

1、同源检测

既然CSRF⼤多来⾃第三⽅⽹站,那么我们就直接禁⽌外域(或者不受信任的域名)对我们发起请求:

使⽤Origin Header确定来源域名: 在部分与CSRF有关的请求中,请求的Header中会携带Origin字段,如果Origin存 在,那么直接使⽤Origin中的字段确认来源域名就可以 使⽤Referer Header确定来源域名: 根据HTTP协议,在HTTP头中有⼀个字段叫Referer,记录了该HTTP请求的来 源地址

2、CSRF Token

CSRF的另⼀个特征是,攻击者⽆法直接窃取到⽤户的信息(Cookie,Header,⽹站内容等),仅仅是冒⽤Cookie中的 信息。 ⽽CSRF攻击之所以能够成功,是因为服务器误把攻击者发送的请求当成了⽤户⾃⼰的请求。那么我们可以要求所有的 ⽤户请求都携带⼀个CSRF攻击者⽆法获取到的Token。服务器通过校验请求是否携带正确的Token,来把正常的请求

和攻击的请求区分开,也可以防范CSRF的攻击:

CSRF Token的防护策略分为三个步骤:

将CSRF Token输出到⻚⾯中 ⻚⾯提交的请求携带这个Token 服务器验证Token是否正确

3、双重Cookie验证

在会话中存储CSRF Token⽐较繁琐,⽽且不能在通⽤的拦截上统⼀处理所有的接⼝

那么另⼀种防御措施是使⽤双重提交Cookie。利⽤CSRF攻击不能获取到⽤户Cookie的特点,我们可以要求Ajax和表单 请求携带⼀个Cookie中的值 双重Cookie采⽤以下流程:

在⽤户访问⽹站⻚⾯时,向请求域名注⼊⼀个Cookie,内容为随机字符串(例如 csrfcookie=v8g9e4ksfhw )。 在前端向后端发起请求时,取出Cookie,并添加到URL的参数中(接上例 POST https://www.a.com/comment? csrfcookie=v8g9e4ksfhw )。

后端接⼝验证Cookie中的字段与URL参数中的字段是否⼀致,不⼀致则拒绝。

4、Samesite Cookie属性

Google起草了⼀份草案来改进HTTP协议,那就是为Set-Cookie响应头新增Samesite属性,它⽤来标明这个 Cookie是 个“同站 Cookie”,同站Cookie只能作为第⼀⽅Cookie,不能作为第三⽅Cookie,Samesite 有两个属性值: Samesite=Strict: 这种称为严格模式,表明这个 Cookie 在任何情况下都不可能作为第三⽅ Cookie Samesite=Lax: 这种称为宽松模式,⽐ Strict 放宽了点限制,假如这个请求是这种请求且同时是个GET请求,则这个 Cookie可以作为第三⽅Cookie

相关推荐

  1. 前端如何预防CSRF

    2024-02-02 08:12:01       54 阅读
  2. CSRF,XSS攻击与预防

    2024-02-02 08:12:01       42 阅读
  3. 前端安全之XSS、CSRF

    2024-02-02 08:12:01       48 阅读
  4. spring boot项目怎么预防CSRF攻击

    2024-02-02 08:12:01       35 阅读
  5. 前端安全之XSS与CSRF

    2024-02-02 08:12:01       39 阅读
  6. <span style='color:red;'>CSRF</span>

    CSRF

    2024-02-02 08:12:01      72 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-02 08:12:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-02 08:12:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-02 08:12:01       87 阅读
  4. Python语言-面向对象

    2024-02-02 08:12:01       96 阅读

热门阅读

  1. python笔记11

    2024-02-02 08:12:01       53 阅读
  2. 前端下载导出文件流,excel/word/pdf/zip等

    2024-02-02 08:12:01       64 阅读
  3. yolov5导出onnx模型问题

    2024-02-02 08:12:01       48 阅读
  4. 【centos系统ddos攻击】

    2024-02-02 08:12:01       57 阅读
  5. Unity_Visual Effect Graph2

    2024-02-02 08:12:01       43 阅读
  6. 为什么游戏APP选择不上架?

    2024-02-02 08:12:01       58 阅读
  7. JVM逃逸分析详解

    2024-02-02 08:12:01       53 阅读
  8. Objective-C中对象与对象之间的关系

    2024-02-02 08:12:01       51 阅读