2023-09-28 10:32:42
CSRF攻击概述
跨站点请求伪造(Cross Sites Request Forgery,简称CSRF)是一种利用用户身份操作用户账户的攻击方式。攻击者诱使用户访问一个页面,该页面以用户的身份在第三方有害站点中执行了一次操作,泄露了用户的身份信息。攻击者随后使用这个伪造的、但真实存在的身份信息,到某网站冒充用户执行恶意操作。
完成CSRF攻击的条件
CSRF的攻击方式
浏览器的Cookie策略
Session Cookie:保存在浏览器进程的内存中,浏览器关闭后失效。在浏览网站的过程中,即使浏览器打开了新的Tab页,Session Cookie都是有效的,因此发起CSRF攻击是可行的。
Third-party Cookie:服务器在Set-Cookie时指定了Expire Time。过期后本地Cookie失效,网站会要求用户重新登录。如果网站返回给浏览器的HTTP头包含P3P头,将允许浏览器发送第三方Cookie,这增加了CSRF攻击的风险。
P3P头的副作用
P3P Header是W3C制定的一项关于隐私的标准,全称是The Platform for Privacy Preference(隐私偏好平台)。如果网站使用了P3P头,浏览器将不再拦截第三方Cookie的发送,这可能导致CSRF攻击更容易成功。
GET、POST请求
大多数CSRF攻击通过<img>、<iframe>、<script>等带src属性的标签发送GET请求。然而,CSRF攻击也可以通过构造一个不可见的iframe窗口,并在其中创建一个form表单,然后使用JavaScript自动提交这个表单来发送POST请求。
CSRF的防御方式
验证码
原理:在CSRF攻击过程中,用户在不知情的情况下构造了网络请求。添加验证码后,可以强制用户必须与应用进行交互,从而验证请求的真实性。
优点:简洁而有效。
缺点:验证码的使用会影响用户体验,且不能给所有的操作都加上验证码。
Referer Check
原理:利用HTTP头中的Referer判断请求来源是否合法。Referer首部包含了当前请求页面的来源页面的地址,一般情况下Referer的来源页就是发起请求的那个页面。
优点:简单易操作,只需要在最后给所有安全敏感的请求统一添加一个拦截器来检查Referer的值。
缺点:出于保护用户隐私的考虑,很多浏览器限制了Referer的发送;从HTTPS跳转到HTTP时,出于安全的考虑,浏览器也不会发送Referer。
使用Anti CSRF Token
原理:把参数加密或使用随机数,使攻击者无法猜测到参数值,从而无法构造请求的URL,也就无法发起CSRF攻击。
例子:在URL中增加一个随机的Token参数,如
优点:比检查Referer方法更安全,并且不涉及用户隐私。
缺点:加密后的URL非常难读,对用户不友好;加密的参数每次都在改变,导致用户无法对页面进行搜索;普通参数也会被加密或哈希,给数据分析带来困扰。
需要注意的点

通过上述措施,可以有效防御CSRF攻击,保护用户的信息安全。同时,开发人员应持续关注安全漏洞的最新动态,及时更新防御策略,确保系统的安全性。