CSRF跨站点请求伪造

(Cross Site Request Forgery)
攻击者盗用了用户的身份,
以用户的身份发送恶意请求,

但是对服务器来说这个请求是合理的,
这样就完成了攻击者的目标。

原理

• 用户打开浏览器,访问目标网站A,
输入用户名和密码请求登录

• 用户信息在通过认证后,
网站A产生一个 cookie 信息返回给浏览器,
这个时候用户可发送请求到网站A

• 用户在没有退出网站A之前
在同一个浏览器打开了另一个新网站B。

• 新网站B 收到用户请求之后返回一些 攻击代码,
并发出一个请求要求访问 网站A

• 浏览器收到这些攻击性代码之后,
根据 网站B 的请求
在用户不知道的情况下,
以用户的权限操作了cookie
并向网站A服务器发起了合法的请求。

预防CSRF攻击:

使用验证码

在表单中添加一个 随机的 数字或者字母验证码,
强制要求 用户 和 应用 进行直接的交互。

HTTP中 Referer 字段

它记录了 HTTP请求 的 来源地址。
检查是不是从 正确的 域名 访问过来,

使用token验证

在 HTTP请求头 中添加 token 字段,
并且在 服务器端 建立一个 拦截器 验证这个 token,
如果 token 不对,就拒绝这个请求。

referer是浏览器提供的

不同的浏览器可能在referer的实现上有自身的漏洞