网站出现bug,我深夜被叫醒处理,用一个触发器解决了问题
凌晨两点,我正在睡梦之中,此时电话忽然想起,在漆黑的深夜中显得格外刺耳。
这个时间点电话响了肯定没好事,因为我的手机在夜间模式下,除非被同一个电话号码打三次,否则是静音,因此电话那边的人肯定有急事找我。我心一下子紧绷,睡意全无。
来电的是一个陌生的号码
“喂”我接通电话
“是xxx吗”电话那头是一个妹子的声音,说话声音有点快, 显得很急切
“是我,你是哪位,有什么事吗” 我说
“我是公司客服部的同事,是这样的,有用户反映我们的网站的文章评论内容被注入了大量的非法广告,我们查到这块功能是你负责的,所以直接联系你,希望你能尽快处理下”妹子回答
评论系统刚刚升级过,难道出BUG了,我心里一突
“好的,我马上看一下,处理好了给你回复”
挂掉电话,起身穿上衣服,打开电脑,打开网站,随便点开一篇首页的热文,下拉到评论处,果然评论里有大量链接内容,里面都是一些不堪入目的内容。 点开另一篇文章,评论处也是如此。
这可是对公司口碑有影响的事故,我吓出一身冷汗,必须赶紧处理。
我远程连接到网站的数据库服务器,select 了评论表,并做了筛选,发现非法评论记录有几十万之多,而且还在不断增长。而问题的原因显然是提交评论的接口被攻击了,但是因为编码是考虑欠周,没有检测这种特殊情况,提交的非法数据被不断的写入至数据库。
要解决这个问题,必须要修改代码,判断提交的内容合法性和提交频率。这需要重新发布版本,况且我家里也没有代码,想改也改不了,而这个问题又必须要尽快处理,这可如何是好。
凌晨两点很凉快,我却急得浑身发热,背心直冒汗。
“没办法了,只能先把已存在的非法评论删除再说”
我用root账户登录数据库,设置了一个筛选出这些非法评论的where条件,这个条件很容易指定, 因为这些评论都长一个样子,然后执行delete语句,几秒钟后,这些非法评论都被删除。
可是原有的评论虽然被删除,新的评论还在不断的写入, 不一会,评论数量又达到几千。
“这样删除永远删不光啊,这可怎么办”我急得抓耳挠腮“这要是不能马上解决, 明天肯定要挨批了,可这个问题根本没有办法马上解决啊,现在连代码都没有。难道让我现在去公司吗”
忽然,我脑袋里灵光一闪,想到了一个解决方案。
我可以在评论表上加一个insert触发器,在触发器中对评论内容进行检测,如果插入的内容是非法评论,则回滚这次操作,这样表中就不会再被写入非法数据了。
按照这个思路说做就做,我建立完触发器,删掉表里的非法评论,过了一会,再次检测发现非法评论未再次出现。
“方案生效了”我舒了口气
然而这只是个临时解决方案,假如对方改了评论内容的格式,那这个触发器就会失效。与此同时,触发器会对数据库性能造成影响,完善的解决方案还是应该通过程序处理,不过应急处理下问题不大,等挨到天亮就去改程序。
“喂,问题我修复了,你们看下”我拨通了刚才打给我的客服妹子的电话
“好的,大半夜的处理问题,真是辛苦你了”妹子客套了一下
“没有,这本来就是我的锅,是我给你们带来麻烦了”我说 “对了,你们持续观测下,如果再有这种情况,立马打电话给我,我刚才只是临时处理下,真正修复问题还要去公司”
“好的,我们知道”客服妹子甜甜的回答
挂掉电环, 我睡意全无,静静的等天亮,去公司彻底解决这个漏洞。
知乎:https://www.zhihu.com/people/aspwebchh
github:https://github.com/aspwebchh
email: aspwebchh@gmail.com