前言
近期我的博客出现了恶意刷评论的情况,打开halo后台,最过分的时候刷了近两百页的评论,连带着每一个评论发送的一千多封邮件...
几页评论还好,几百页要删评论还是很痛苦的...所以只能进数据库删除了
首先暂时关闭了评论接口,但是总不能一直关闭评论啊,更不能让恶意评论那么猖狂时不时给我来一下,而且还得去数据库删,太费劲了,那就想想办法
分析
数据库的评论表记录了评论人的相关信息,比如名字,邮箱地址,网址, ip等信息,但是并没有什么用,像名字,邮箱地址,网址,既然是刷恶意评论,那么肯定填的是垃圾信息,邮箱给我填了halo官方邮箱,评论内容全都填写了halo再github上的某issues(和halo有多大仇啊这...),然后看看ip吧,数据库group by看看,嗯果然没啥用,全都是代理ip,并看不出攻击者的任何信息,其他字段就更别说了,没用
下面是数据库查到的恶意评论ip(部分)
77.247.181.162
23.129.64.211
31.220.0.202
185.121.69.16
51.83.129.84
31.220.40.239
176.10.99.200
31.220.40.237
51.178.48.248
51.38.64.136
104.244.76.13
23.129.64.191
199.195.250.77
178.20.55.16
51.210.243.173
51.210.242.130
185.220.102.248
185.220.102.247
185.220.101.202
185.220.101.8
185.220.101.205
185.220.102.250
185.220.100.252
185.220.102.251
185.220.100.255
后来发现了一个比较特别的字段,user agent,一般是浏览器请求的时候带过来的,但是攻击者的UA很奇怪
嗯?bilibili security browser
???什么鬼???b站啥时候有浏览器了?百度下,只是查到的是bilibili安全挑战赛的内容=。=
一般正常的UA都是Mozilla
开头的UA,比如Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36
虽然不清楚攻击者为啥要填这个,但起码也是区分攻击者的一个方式,暂且这么干吧
尝试解决
method1
既然能够通过UA区分攻击者身份,那么我就可以根据UA判断攻击者并拒绝访问就可以了,因为我用了Nginx,那么是不是可以在nginx中进行判断呢?
查了下,找到一篇文章,依样画葫芦,在server层加上
匹配UA为bilibili security browser
的用户,直接给他403拒绝掉
暂且这么办,毕竟硬编码不太好,万一攻击者发现了改了UA就不行了,后面再看看有没用更好方式
method2
同时,在CDN中我也加入了访问评论接口访问频率的限制,超过一定阈值,也就是一个时间段内评论次数过多也直接拒绝访问,双管齐下
method3
halo允许后台设置评论经过审核后才能够显示,那么就开启评论审核,起码不至于恶意评论直接就刷到了前台,影响正常用户的观感
后记
维护自己的小站时不时还是会遭到各种奇奇怪怪的攻击,对于网络安全还是得多加学习才行,这次的恶意刷评论的情况,我也不清楚是否有效,得尝试一段时间看看,时不时来这么一下还是挺影响心情的,最后也希望各位大佬们对小站高抬贵手哈哈