提示:前端查漏补缺,仅代表个人观点,不接受任何批评
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、CSRF是什么?
-
CSRF:Cross Site Request Forgy(
跨站请求伪造
) -
指的是利用用户身份操作用户账户的一种攻击方式,即攻击者诱使用户访问一个页面,就以该用户身份在第三方有害站点中执行了一次操作,
泄露了用户的身份信息
,接着攻击者就可以使用这个伪造的,但真实存在的用户身份信息,到某网站冒充用户执行一些恶意操作。
二、CSRF的攻击方式
想知道如何防范,肯定得先知道别人是怎样进行攻击的
1.浏览器的Cookie策略
浏览器所持有的策略一般分为两种:
- Session Cookie,
临时Cookie
。保存在浏览器进程的内存中,浏览器关闭了即失效。 - Third-party Cookie,
本地Cookie
。服务器在Set-Cookie时指定了Expire Time。过期了本地Cookie失效,则网站会要求用户重新登录。
我们通常在浏览网站的过程中,即使浏览器打开了Tab页,Session Cookie都是有效的,因此发起CSRF攻击是可行的
2.GET,POST请求
-
大多数 CSRF 攻击,都是通过
<img> 、 <iframe> 、 <script>
等带 src 属性的标签,这类标签只能发送一次 GET 请求,而不能发送 POST 请求,由此也有了认为 CSRF 攻击只能由 GET 请求发起的错误观点。 -
构造一个 POST 请求,只需要在一个不可见的iframe窗口中,构造一个form表单,然后使用JavaScript自动提交这个表单。那么整个自动提交表单的过程,对于用户来说就是不可见的。
3.P3P头的副作用
"P3P Header"是 “W3C” 制定的一项关于隐私的标准,全称是 “The Platform for Privacy Preference”(隐私偏好平台)
如果网站返回给浏览器的 HTTP 头包含有 P3P 头,则在某种程度上来说,将允许 浏览器发送第三方 Cookie。在 IE 下即使是"<iframe>"
、<script>
等标签页将不再拦截第三方 Cookie 的发送。主要应用在类似广告等需要跨域访问的页面。
三、防范CSRF攻击的方法
1. 请求头中带token;
由服务端随机生成token,保存在服务端session中,同时保存到客户端中,客户端发送请求时,把token带到HTTP请求头或参数中,服务端接收到请求,后台通过验证请求中的token与session中的是否一致
。如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
2. 后端验证源referer字段;
根据 HTTP 协议,在 HTTP 头中有一个字段叫Referer,它记录了该 HTTP 请求的来源地址。通过验证Referer
,可以检查请求是否来自合法的"源"。
3. 验证码
通过增加网站A的验证手段,例如增加图形验证码
或短信验证码
等等,只有通过验证的请求才算合法。但是这种方案拥有两个局限性,一个是增加开发成本,另外一个是降低用户体验。
总结
我们在日常项目开发中应该重点注意一下几点
- Get 请求不对数据进行修改
- 不让第三方网站访问到用户
Cookie
- 阻止第三方网站请求接口
- 请求时附带验证信息,比如验证码或者
token