对CSRF的简单理解

CSRF(Cross-site request forgery,跨域请求伪造)

前言

CSRF是一种安全问题:攻击者盗用你的身份(客户端获取的cookie)想第三方网站发送请求,进行非法操作。

一、CSRF的过程

以访问银行网站为例:

  1. 用户User访问银行网站,登录成功后,客户端生成相应cookie。
  2. 在User未登出的情况下访问了危险网站B,在网站B中触发了一个请求,如点击图片,该图片src向银行发起转账请求。由于User未登出,在网站B向银行发送请求时,会携带cookie。
  3. 银行后台响应请求,完成非法操作。
    在这里插入图片描述

二、如何防御CSRF攻击

1.验证 HTTP Referer 字段

HTTP Referer 字段它记录了该 HTTP 请求的来源地址。服务器端可以验证请求的来源,若同源则响应。但是,HTTP Referer 字段可以被修改,因此并不安全。

2.使用验证码

在客户端使用验证码可以有效防止CSRF攻击。

3.使用token验证

这个Token的值必须是随机的。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。

三、cooike和token的区别

cookie

  • cookie是有状态的,服务器端保存的sessionID与cookie中的sessionID做对比,相同则认证成功。
  • 当浏览器发送http请求时会自动将cookie携带上,这就造成了CSRF风险。
  • 由于服务器端要保存sessionID,因此分布式的服务器不能共享sessionID。

token

  • token是无状态的,客户端发送请求,服务器端生成token返回给客户端。客户端下次请求时把token挡在Header中发送给服务器。
  • 服务器端不需要保存sessionID,只需要通过对token使用秘钥进行计算签名,若得到的签名和携带的token相同则说明有效。
  • 因为不会像cookie一样自动添加到Header中去(应该是在同源网站中才会添加token进Header中去),因此可以避免CSRF攻击。
  • 可以在分布式服务器中共享一个token,还可以应用在移动端APP中。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页