银弹谷零代码开发平台V百科使用技巧:想知道如何消灭跨站点请求伪造漏洞?
本期V百科将带来执行系统出现跨站点请求伪造漏洞的解决方案!该问题平台已经能够完美解决,下面将给出相应的解决方案。
在此之前我们先来了解一下“跨站请求伪造”这个讨厌的漏洞~
什么是跨站点请求伪造?
跨站点请求伪造全称Cross Site Request Forgery(以下简称CSRF),是指攻击者可以在第三方站点制造HTTP请求并以用户在目标站点的登录态发送到目标站点,而目标站点未校验请求来源使第三方成功伪造请求。
简单来说,CSRF必须经过两个步骤:
用户访问可信任站点A
并产生了相关的cookie
用户在访问A站点时没有退出
同时访问了危险站点B
具体来说就是攻击者借用用户的名义,向某一服务器发送恶意请求,对服务器来讲,这一请求是完全合法的,但攻击者确完成了一个恶意操作,比如以用户的名义发送邮件,盗取账号,购买商品等等。
目标站点就好比那种需要刷卡进入的房间,假如存在伪站点请求伪造漏洞,你本人的卡片在刷卡时就会被盗取信息,坏人盗取信息后就可以伪造出一张使用你本人信息的卡片,然后自由进出你的房间,盗取你的财物。
为什么会有跨站点请求伪造?
JS控制浏览器发送请求的时候,浏览器是根据目标站点,而不是来源站点,来发送cookie的,如果当前会话中有目标站点的cookie,就发送出去。核心问题是浏览器的会话机制,是跨站请求伪造漏洞的根源。
下面是CSRF的攻击原理:
CSRF存在的原因
假如存在漏洞,从使用IBM公司的AppScan安全测试工具进行扫描的结果可以看到如下图所示的漏洞报告。
跨站点请求伪造属于中危漏洞,假如不尽快解决的话会出现可能被窃取或操纵客户会话和cookie,用于模仿合法用户,从而黑客能够以该客户身份查看或变更用户记录以及执行事务。
该版本执行系统出现跨站点请求伪造漏洞的原因在于执行系统根过滤器对请求的认证方法不充分。
三种防御策略
1、服务器端表单hash认证
(工作量太大,本文不采取)
在所有的表单里面随机生成一个hash,server在表单处理时去验证这个hash值是否正确,这样工作量比较大。
2、验证http Referer字段
(本文选用的解决策略)
根据HTTP协议,HTTP头中的字段Referer记录了HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。
比如某银行的转账是通过用户访问
http://bank.test/test?page=10&userID=101&money=10000 页面完成,用户必须先登录bank.test,然后通过点击页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面的URL(本例中,通常是以bank. test域名开头的地址)。而如果攻击者要对银行网站实施CSRF攻击,他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻击者的网站。
因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求验证其Referer值,如果是以bank. test开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。
3、在HTTP头中自定义属性并验证
(比较有局限性,本文不采用)
自定义属性的方法也是使用token并进行验证,和前一种方法不同的是,这里并不是把token以参数的形式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。
通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这样解决了前一种方法在请求中加入token的不便,同时,通过这个类请求的地址不会被记录到浏览器的地址栏,也不用担心token会通过Referer泄露到其他网站。
解决http Referer字段的解决策略步骤
有二种情况,请按实际选择使用,二选一。
外层服务未使用Apache
1、登录执行系统控制台,点击菜单“系统维护”栏目下的“配置管理”
2、找到构件标识为“com.toone.v3.platform-20mvc”的配置项,点击进行修改(若不存在,则需要升级执行系统)。
3、设置参数needCheckRefererHeader的值为true,另外两个配置项根据需求设置。
外层服务使用Apache
请设置参数needCheckRefererHeader的值为false。同时启用Apache自身的防盗链设置,具体方法可以参考:
1、 检查配置文件中(\Apache2.4\conf\httpd.conf)的配置项:
LoadModule rewrite_module
modules/mod_rewrite.so,若该配置项被注释(#)则打开它;
2、添加如下自定义配置:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER}
!http://10.1.27.37:7080/ [NC] #v服务的地址
RewriteCond %{HTTP_REFERER}
!http://10.1.27.37:9080/ [NC] #将需要排除过滤的站点以该方式添加,如Apache代理服务器
RewriteRule (.*)$ [F]
注意:
若通过域名访问,则需要将域名加上,配置方法同上,复制一行,修改为域名即可:
RewriteCond %{HTTP_REFERER}
!http://www.xxx.xxx/ [NC]
至此,关于3.X版本执行系统出现跨站点请求伪造漏洞的说明就结束啦,希望能帮助大家把遇到的问题全都解决!