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