CSRF 入门及防御

Posted 二不挂五

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSRF 入门及防御相关的知识,希望对你有一定的参考价值。

CSRF 入门及防御

CSRF, Cross-Site Request Forgery ,跨站请求伪造,和 XSS 一样,是web前端面临的主要安全问题。本文主要了解下 CSRF的原理和常规解决方案。

CSRF 是什么

维基百科 上是这样介绍的:

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法

通常情况下,CSRF攻击的发生,是在这样的情形下(下面说的都是在同一个浏览器下):

  1. 你在某个受信任网站 A 登录,保持了登录态,比如在 www.renrendai.com 登录

  2. 你在同一个浏览器里,访问了某个攻击者的网站 B,比如 www.attack.com

  3. A 网站有一个接口,没有适当的安全检查,比如有个 投资接口,正常情况下,用户在 A 网站登录后,点击某个购买按钮,就能投资,不用输入密码或是验证码之类的

  4. 当你在访问 B 网站的页面时,看上去可能是一部电影,或者一些图片,攻击者这时候,已经在 B 的页面上,调用了 A 网站的 投资接口

  5. 你再次回到 A 网站,发现自己莫名其妙就投资了几百块,这还了得,果断打客服骂娘

上面这个解释,对比 维基百科 的介绍来看,正好是,攻击者B,利用你在A网站的登录态,在你不知情的情况下,偷偷的帮你投资了几百块。可以看出,需要被CSRF攻击,在通常情况下,需要以下几个条件:

  • 用户处于登录状态

  • 受信任的web应用,存在接口漏洞

  • 用户访问了攻击者的网站

通过上面也可以看出,CSRF攻击有一个很明显的特征,攻击的执行动作是发生在 B 网站上的,并不是 A网站,请求是直接在攻击者的网站上,向受信任的网站发起。

CSRF,怎么办

Referer 校验

这种办法简单易行,工作量低,仅需要在关键访问处增加一步校验。但这种办法也有其局限性,因其完全依赖浏览器发送正确的Referer字段。虽然http协议对此字段的内容有明确的规定,但并无法保证来访的浏览器的具体实现,亦无法保证浏览器没有安全漏洞影响到此字段。并且也存在攻击者攻击某些浏览器,篡改其Referer字段的可能。

token 校验

根据 CSRF 攻击原理可以看出,攻击者利用了浏览器的处理cookie的特性,即使在攻击者网站B上,发起对受信任网站A的请求,浏览器也会带上存储在A网站下的cookie值,相当于,攻击者合法地通过浏览器特性,"拿到了" 用户的cookie。那我们是不是可以在受保护的接口里,校验其他的一些字段,一些不能在攻击者网站上读取到的字段。

通常的做法,在渲染页面时,后端会给页面里传一个随机 token,并把这个 token 记录在 session 中,页面form表单在提交的时候,带上这个 token,后端在提交的接口里,校验请求参数/请求header的 token 是否和 session 中的相等,只有相等,才认为请求合法。因为这个传到浏览器的 token 值,是放在 页面(html) 里的,在攻击者的网站上,当然是没办法拿到,因此也就阻挡了 CSRF。

注意,上面这个实现,过于粗陋,根据 koa-csrf 源码里的实现,最好是通过一批 secret,生成随机的 salt,来计hash并对比。

同一个 token 使用次数?之前一直在纠结,使用 token 来提交数据,如果其他字段有问题,那 token 是否需要废弃?如果废弃,前端页面里的 token,怎么获取最新的。根据 koa-csrf 的实现来看,并不需要考虑 token 过期、是否已使用的问题,因为在 CSRF 场景下,token 能生效的前提,就是攻击者拿不到我们的 token,如果攻击者通过 XSS 或其他手段,能否拿到我们的 token,那么即使是过期、一次使用作废,也不能解决攻击者重新获取我们新 token 这个问题。

用户输入

除了技术手段外,最后还有个大招,就是在关键的接口,都强制用户输入一个内容,比如 图片验证码, 短信验证码用户密码 等,这些都涉及到产品体验上的改动,需要和PM UE 等同学确认了。

SameSite Cookie

CSRF攻击依赖了浏览器的对第三方cookie的处理,在新的规范里,cookie上增加了一个标记,可以设置cookie在第三方网站请求时,是否允许浏览器携带上。

相关资料

  • 维基百科-CSRF

  • 浅谈CSRF攻击方式

  • SameSite Cookie,防止 CSRF 攻击

  • 前后端分离架构下CSRF防护机制

  • Understanding CSRF

  • koa-csrf

---- 时2019年1月13日 竣工于帝都望京东


以上是关于CSRF 入门及防御的主要内容,如果未能解决你的问题,请参考以下文章

安全性测试入门 :CSRF 跨站请求伪造攻击和防御

CSRF攻击原理及防御

CSRF攻击原理及防御和相关漏洞复现

CSRF攻击原理及防御和相关漏洞复现

CSRF漏洞攻击原理及防御方案

CSRF漏洞分析利用及防御