功能介绍
CSRF一般指跨站请求伪造。跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。针对发起CSRF攻击进行防护。
背景信息
CSRF的攻击场景
攻击者盗用了用户的身份,以用户的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以受攻击者名义发送邮件、发消息,盗取账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
CSRF的攻击原理
1、用户User打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2、在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3、用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4、网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5、浏览器在接收到这些攻击性代码后,根据网站B 的请求,在用户不知情的情况下携带Cookie 信息,向网站A 发出请求。网站A 并不知道该请求其实是由B 发起的,所以会根据用户User 的Cookie 信息以User 的权限处理该请求,导致来自网站B 的恶意代码被执行。
CSRF防护的方式
1、验证码
CSRF攻击的过程,往往是在用户不知情的情况下构造了网络请求,验证码则强制用户必须与应用进行交互才能完成最终请求。但基于使用体验,网站不会给所有的操作都加上验证码。
2、验证HTTP Referrer字段
根据 HTTP 协议,HTTP 头部中Referrer字段记录了该 HTTP 请求的来源地址。
比如一个论坛发帖的操作,在正常境况下需要先访问有发帖功能的页面,在提交发帖的表单时,Referrer值必然是发帖表单所在的页面。如果Referrer的值不是这个页面,甚至不是发帖网站的域,则极有可能是CSRF攻击。
3、请求中添加token并验证
在请求中放入黑客所不能伪造的信息,并且该信息不存在于Cookie 之中。可以在HTTP 请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token 或者token 内容不正确,则认为可能是CSRF 攻击而拒绝该请求。
前提条件
- 已开通Web应用防火墙(边缘云版)
- 已新增域名并成功接入WAF,具体操作请见WAF接入
- 开通体验版及以上版本支持使用CSRF防护功能
操作步骤
- 登录Web应用防火墙(边缘云版)控制台
- 登录web应用防火墙(边缘云版)控制台,在左侧导航栏中选择【域名管理】—【域名列表】,单击域名列表操作【安全防护】进入高级防护页面;
- 进入“CSRF防护”页面,可以配置CSRF防护策略;
配置说明
配置项 说明 开关 开启/关闭CSRF防护策略 处理动作 请求触发CSRF防护后的处理动作,可以选择告警或拦截 可信任域名 当请求referrer中含该域名,则该请求放行(可填多个域名,默认一级本域名)默认域名可进行修改 条件 1)防护范围:设置要检测的请求范围,支持正则/字符串;支持配置多条防护粒度与防护范围,多条防护粒度为且关系,多条防护范围为或关系
URI:填写包含/不包含防护的URI
METHOD:填写包含/不包含的请求方法
PATH:填写包含/不包含的PATH
2)合法referrer:填写合法url,当请求referer精确匹配“合法referrer”,则该请求放行;
3)空referrer时执行操作:当请求没有referrer这个字段时候的处理动作;跳转,拦截,监控,放行(其中选择跳转后需要填跳转目的地址,默认当前域名首页);
4)不合法referrer时执行操作:当请求referer没有在"可信任域名"、"合法referrer"中,该请求的处理动作,拦截,监控,放行(其中选择跳转后需要填跳转目的地址,默认当前域名首页)
注意:存在多条CSRF防护配置时,按照顺序进行防护范围的匹配,采用第一条命中防护范围的策略