我的博客使用typecho,评论用了滑动验证插件,一段时间后插件莫名失效,一番搜索发现有极验滑动验证的插件,安装后无卵用,插件有bug,只能在前端阻挡一下,抓接口直接提交评论可以提交成功,因此这个插件==无。
想去作者博客反馈下,发现很久之前就有人反馈了,作者并未回复,但我测试了下作者博客的评论就没问题,作者公开的代码和自用的不一样啊,遂放弃此插件,最终使用了一个图片验证码的。
自己抓包测试,不填验证码无法提交,说明插件没问题。
有趣的事情来了,当我换上验证码插件后,发现垃圾评论还在陆续到来,此时的我有点懵,难道是对方发现了typecho的bug?
去nginx看看日志就清楚了,nginx默认是不记录post参数的,修改nginx配置文件,在http
域里增加以下代码:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'"$http_referer" $status $body_bytes_sent $request_body '
'"$http_user_agent" "$http_x_forwarded_for"';
其中main
是为后面的格式自定义的名字,你也可以叫my_format
,然后在网站的日志路径后面加上这个名字,比如我的是access_log /www/wwwlogs/sssis.me.log main;
。
此时就能在日志里显示访客的post信息,灵异的是,post信息里竟然有...captcha=nncuts...
,此时脑中浮现出印度人工刷流量的画面……
(图片来自《硅谷》)
这评论机器人还自动打码了?还有一点说不通,原先我的博客没有评论验证,可以直接post评论,加上插件后,post信息里也自动加上了验证码,难道是被人盯上了?然后瞬间否定了这想法,首先,盯我这小破网站还不够浪费精力的,其次,垃圾内容显然是为SEO,因此判断,绝对是机器人。
随后我把验证码input
标签的name
改为captcha2
,再看,惊了,post提交的信息也变成了captcha2
,这机器人也太智能了吧?
再把name
改为一个与验证码无关的词时,机器人还是准确地找到了新名称。
再加上一个input
标签,post参数成了captcha_0=xxxx&captcha_1=
,第二个参数为空,说明机器人会遍历form
里的所有input
,且自动将验证码填充到验证码下第一个input
的参数。
知道了套路,反套路就很容易了,可以使用以下方式:
- 根据其请求方式,并没有使用无头浏览器等,使用极验等js加载的滑动验证方式可解;
- 若使用图片验证码,则可在验证码附近添加干扰
input
,同时使用type='hidden'
属性(机器人可以改进下,只识别type='text'
的标签); - 使用Fail2ban,机器人的特征是评论内容纯英文、ip为欧洲(大部分为法国)。
我们能做的只是防御吗?当然不,还可以利用下,比如,将验证码的图片链接替换为其他网站的验证码链接,修改下评论模块,可将验证码图片和对应值保存,几个月后,用这些数据应该能训练出个模型吧 : )
本文由 花墨 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Apr 29, 2022 at 03:07 pm
I'm a robot.
可别闹
good idea
从v2来看超火的网红博客
特地来打卡
网...网红?
I'm a Googlebot.
I'm not a robot.
I'm human.
Yes, I know.
听说有人要薅我训练模型?
你好,是的 :)
I’m a robot,too.
另:在线打码平台了解一下,全人工识别验证码。谁鸟你nginx不nginx
博主试试这个插件看看,
https://github.com/mierhuo/Typecho-SimpleCommentCaptcha
好奇有没有点效果
好的,谢谢
I am a Robbot
我是机器人,我是来杀康纳的
haha