在我浏览器的策略游戏中,有个玩家一天内发出了6.2万次请求。他的用户代理是我的游戏名加Bot/3.0,后面还附了个GitHub链接,根本没想隐藏,而我的过滤器没拦截到,因为名单上恰好没有这个准确名称。我的名单里只有无头Chrome、curl、Python requests这些常规项。

于是我开始设置速率限制。顺便说一句,单个限制根本没用——脚本会爆发式请求,等待,再爆发。现在我设了六个重叠的时间窗口,从一分钟到三小时,说实话只有那个最长的限制在真正发挥作用。

后来我的顶级玩家在筹备一场突袭时触发了三小时限制,他发消息问我是不是该退游了。他是完全合规的玩家,那天点了8500次,我逐条核对了记录。于是我提高了限制——当然这也给了每个爬虫更多空间。这点至今让我有点纠结:你最终只能为你最好的玩家设定数字,而不是为机器人设定。

行为检测更有效。我的页面设置了防抖机制,所以我的游戏界面本身从单个标签页每秒最多发3次请求,任何更快的请求都不是来自我的游戏。不过这也检测到了账号共享,以及有人替度假的朋友代玩。

总之,现在我认为完全阻止是不可能的,只能做到足够烦人,让没人愿意费劲。而对我帮助最大的根本不是安全措施——我的一些游戏机制有硬上限,比如某样东西最多6个,另一样最多12个。所以无论机器人点得多快,它能刷取的数量都有天花板。

你是怎么处理的?