• 网站开发人员面对的不仅是用户还有黑客

    网站被黑客攻击的很大原因是做的限制不够,但是做的限制过多也会造成用户体验不好。

    以前只是喜欢看黑客攻防的书,想不到这两天实战了。昨晚11点多,老大打电话来说网站短信验证码发送出现异常,问我在更新生产环境的时候有没有异常,让我确认一下是程序的问题还是外部的原因。记得没有修改过那一块的代码,但为了确定原因,马上打开了电脑然后远程控制到公司的办公电脑(出来工作后养成了一个小小的良好习惯就是下班的时候会把公司办公电脑的远程工具打开,这样网站有问题就可以立刻在家里远程操作)。

    首先检查了数据库记录,看到记录短信发送的数据表的数据真的一下子多了很多,仔细分析了表的数据发现不是程序问题,再用Chrome的调试功能发现了原来是一个手机短信验证接口被攻击了。因为短信量非常大,而且晚上基本上没有正常注册的用户,所以采取了暂停短息发送。然后顺便测试了一下一些其他网站,发现有些网站也有这个问题。

    第二天早上回到公司分析了访问日志表,总共有几百个肉鸡IP在攻击,而且一直持续不停。这几百个肉鸡通过攻击接口向不同的手机号码发送验证短信。之前只是做了隔60秒才能发送下一条信息的限制,没有限制一个手机号码一天接收的短信数目是因为短信通道有时候有问题,用户注册的时候需要请求好几次才能收到短信;而没有限制一个IP一天接收的短信数目是因为面向的用户主要是企业客户,一家企业往往只有一个对外的公网IP,而内部员工的数量可能不少。还是那句话“网站被攻击的很大原因是做的限制不够,但是做的限制过多也会造成用户体验不好”。经过讨论,得出几套方案:

    1.添加图片验证码。这个算是最简单和最有效的,不过对于用户体验来说,这个确实不好,因为用户已经习惯了发送手机验证码的时候只需要点击一个按钮。

    2.限制一天内向一个手机号码发送的短信数目。虽然可能会出现用户正常注册的时候需要请求几次才能收到短信,不过这个次数并不高,而且虽然面向的用户是企业用户,但手机号码是个人使用,限制发送的短信数目可行。然后自己赶紧的在后台代码添加了这个限制。

    3.将肉鸡IP拉入黑名单。这个可能会有小问题,因为是根据访问日志中访问接口达到一定数目来判断是否为肉鸡IP,有可能将有很多员工的公司的公网IP误认为是肉鸡IP(公司的IP刚开始就是被误以为是肉鸡IP)。不过把值定得合适,就会很少出现这种误杀,而且也会返回一个提示给用户“你的IP已被限制,请联系我们的客户”,这样即使是误杀,也可以手工处理。自己也赶紧在数据库新建了一张IP黑名单表,在代码里面做了这个黑名单过滤。没有直接使用iptables是因为这样的拦截是在系统级的,如果是误杀就不能将提示反馈给用户,用户可能完全不知道下一步要怎么操作。

    4.请求添加token。这个也能在一定程度上防止攻击,但是通过程序来完成的防御也会被绕过。

    (待续)