某网站部分用户无法访问现象故障分析

题前:这篇文本来是想发到科来论坛下的(带有目的性),结果科来论坛已经完全沉寂、管理员失踪,我发的帖子审了两个月也没审完,极度失望,感觉白写了。不过好歹也花了一番心血,原文贴到51CTO博客,懒得修改了。

成都创新互联专注于荔湾网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供荔湾营销型网站建设,荔湾网站制作、荔湾网页设计、荔湾网站官网定制、微信小程序定制开发服务,打造荔湾网络公司原创品牌,更为您提供荔湾网站排名全网营销落地服务。

背景:运维的某网站,本地已配备360旗下网神公司的WAF设备。因最近网络安保形势严峻,为加强网络安全防护能力,开始试用某云WAF系统(将域名解析地址指向云WAF系统地址,由云WAF系统负责摆渡),期间发现少量用户无法登陆,原因不明。切回本地后故障依旧,但据网站管理员反映,清除浏览器缓存或更换浏览器后即可正常访问。
接到反馈后,因故障无法重现且暂未发现可供搜集信息的用户电脑,现场工程师未能提供更多有价值的信息,难以确定具体故障原因。因网站访问量小且故障不明显,因此留待故障重现后解决(一部分不可曰的原因是懒)。几日后接到本地用户反馈,开始做工。

排测过程:
经用户电脑测试,使用常用的360浏览器访问完全无响应,找出IE浏览器后访问正常(为什么要找?这要问360安全卫士)。
初步判断为访问被WAF系统拦截。
先PING域名,发现网站域名指向本地系统,由此排除云WAF直接拦截可能。
登陆本地WAF设备,发现用户设备访问被拦截记录,拦截原因为跨站脚本***。故障原因找出。

题外话:朋友们这时肯定会非常疑惑,那为什么之前没有出现这个故障呢?难道经云WAF切换后会出现这种灵异事件?这时候管网络的工程师解释说,本地WAF上线时,防护的其他网站某些正常访问会被此WAF跨站脚本***规则集下的某几条规则拦截,当时为保障系统正常运行直接剔除了这几条规则,现因网络安保原因,试用云WAF系统前一周已经重新启用这几条规则,可能因网站访问量小之前并未发现异常。顺带说下,这个管网络的就是本人,故障原因找出前完全忘了这回事。自责三秒钟,然后开始抱怨,做工太杂太杂太杂真的会死人啊,记忆力严重衰退,日后必定会老年痴呆。

好了,说回正题。故障原因找到了,怎么解决呢?再次剔除这几条规则实在是不符合本人职业素养,那就只能继续深挖故障原因了。
用户无法访问是因为被WAF拦截,那,为什么会被拦截呢?
查看WAF拦截日志,除拦截规则外无任何其他异常信息。只能去现场抓包了。这时候隆重推荐下所用的网络抓包软件:科来网络分析系统 10 技术交流版。没钱买专业版的,幸好技术交流版也已经够用了(如此大力推荐,只望科来官方人员见到此贴后能让我以巨优惠价购买正式版过过瘾)。
打开科来网络分析系统 10 技术交流版,进入实时分析界面,点击开启按钮进入抓包分析界面后,先开360浏览器,直接访问域名,页面无法打开,访问域名下的/INDEX.DO页面,仍然无法打开;然后开IE,两个页面均访问正常,点击停止按钮结束抓包。
在分析界面中点击TCP会话栏,在过滤输入框中输入网站域名进行过滤,然后按发包时间进行排序,结果截图如下:
某网站部分用户无法访问现象故障分析

点开查看访问失败的记录,发现TCP连接正常建立后,访问请求无法送到服务器端,一直在不停重传,截图如下:
某网站部分用户无法访问现象故障分析

而访问正常的记录截图如下:
某网站部分用户无法访问现象故障分析
由此可见,访问网站的第一个请求就已经被WAF拦截。接下来对比两个请求包的参数差异。
以下是访问被拦截的交易请求参数截图:
某网站部分用户无法访问现象故障分析
以下是访问正常的交易请求参数截图:
某网站部分用户无法访问现象故障分析
经对比,两个交易只有携带的COOKIES参数有显著差异:
被拦截的COOKIES参数:
Cookie: UM_distinctid=15e78eb321b81-05b400905-4349052c-1fa400-15e78eb321e305; _gscu_264088535=05267233ghc0ek25; __guid=188558254.4450887942645648000.1505720364652.8474; CNZZDATA1254021662=1759409609-1505716920-http%253A%252F%252Fwww.XXXX.gov.cn%252F%7C1505716920
访问正常的的COOKIES参数:
Cookie: JSESSIONID=F91BD6BBF20E7FEF70066DD1CBB86819; CNZZDATA1254021662=2125437701-1505264969-%7C1505976274; _gscbrs_264088535=1; UM_distinctid=15ea368883f9b-07964ba146a25f4-19704f6e-1fa400-15ea36888401c6; _gscu_264088535=05980090ml7lf511; _gscs_264088535=05980090gjxj3h21|pv:5

由此可以看出:

  1. 被拦截的COOKIES参数使用了URL转义符,且转义两次。(http%253A%252F%252Fwww.XXXX.gov.cn,其中%25转义后就是%)
  2. 此COOKIES信息带有CNZZ(站长之家)标识;(参数中有CNZZDATA字样)
    由此推断:
  3. 访问URL参数中的COOKIES信息带有转义符,符合跨站脚本***的最基本特征之一,基本可以明确正常访问被拦截是因为WAF拦截规则简单粗暴导致。
  4. 经网站管理员配合,明确留下此COOKIES信息的代码是站长之家访问统计代码。
    经测试,正常访问此网站产生的COOKIES不含转义参数;只有在登录网站并注销后仍不关闭浏览器且继续访问网站的情况下才会产生如被拦截的COOKIES参数,进而导致访问被WAF拦截,这也是为什么只有极少部分用户访问被拦截的原因。
    事后,网站管理员将网站代码中的站长之家访问统计代码替换为百度访问统计代码之后,问题解决。
    事终感慨:
    1. 科来网络分析系统确实好用,尤其是对于认不了几个英文的朋友;(再次重申:如此大力推荐,只望科来官方人员见到此贴后能让我以巨优惠价购买正式版过过瘾);
    2. 360网神的WAF有待大力改进;
    3. 站长之家的统计代码需要更新;
    4. 工作太杂真TM受不了。

分享标题:某网站部分用户无法访问现象故障分析
文章地址:http://myzitong.com/article/iegsii.html