(1)情景再现:
客服产品中心接到用户反馈的问题:网络正常,但是网页无法加载,网站首页可以登录,公司开发的论坛APP也是这种情况,用户问答模块数据无法加载。由于是初创公司,产品去年刚刚上线,以为是数据库的Bug,进行测试之后并不是数据库的问题,可以排除。由开发人员检查功能代码发现并不存在逻辑问题。次日,监控报警显示数据库磁盘使用率高达98%。同时通知运维人员进行数据的热迁移和磁盘的扩容,问题得以暂时的缓解,监控显示磁盘数据增量基本保持不变数据持续增长。尤其是在中午或者是傍晚,数据库服务器负载明显偏高,经过一天的技术排查仍未发现问题。查看网站Web服务器的日志发现不同的IP地址访问该论坛网站的时间间隔是呈现一致的规律性,但是间隔的时间并不是一样,怀疑友商攻击。由于Web服务器的负载均衡,并没有感觉到Web服务器的负载出现问题,也正是负载均衡屏蔽了这个隐蔽的事件。同时监控系统的设计也没有精准统计IP地址的访问时间间隔数据,只是统计访问时段的数据。这为解决问题进一步提供了线索,我们把问题放在用户提交的数据上,把数据库的数据导出发现,用户问答模块存入的数据超过70%都是空白,由此可以确定是攻击者在不同间隔的时间使用程序持续提交空白的问题,并使用空格或者是特殊字符进行回答导致数据库磁盘爆满,给用户留下登录正常,就是看不到数据的假象,其实服务器返回的数据正是攻击者提交的空格。
(2)问题解决:
开发人员在代码中实现特殊字符和空格字符的判断,并且不允许同一用户在同一时间发送多个问题。
运维人员做好数据库存储的弹性伸缩存储,并过滤频繁访网站的IP地址。
监控程序增加同一IP地址登录发文时间间隔的数据收集和统计。
本文转自 棋帅小七 51CTO博客,原文链接:http://blog.51cto.com/xvjunjie/2055817