0.首先你得有一个能扛住爬虫的可以计算黑白名单的数据库,当然我们选择redis,单台 qps 达到20000+,杠杠的,然后你得在不影响业务的情况下来验证爬虫,我们可以通过异步读取nginx的access.log进行校验,前台只需要在关键的功能点判断一下ip是否在黑名单即可
1. 同一个ip在某个功能点一秒两次请求算爬虫,将ip加入黑名单,防住大部分的爬虫
2 .截取一段请求列表,如果某一个useragent出现的频率远远大于该正常该浏览器占有的比例,全部算爬虫,这里容易误杀,可以通过一个强壮的验证码来避免,一定要强壮,要不反而会方便爬虫!这个方法已经验证,特别厉害,特别是半夜没人的时候,杀的爬虫屁滚尿流
3.其他有针对性策略,通过user-agent referer,等特点,直接永久封禁ip
例如 user-agent 是python urllib,httpclient,等明显的 爬虫的http库等,referer不符合页面跳转逻辑等
4.目前验证码已经很难防住现在的爬虫了,随便去买个第三方的服务,再复杂的验证码也能搞定,现在神经网络太厉害了,
目前的策略是通过手机来解锁被封禁的ip
5.针对2的,如果有的人随机换user-agent,那么就再来一条策略,如果半个小时内,同一个ip user-agent超过5种,永久封禁
6.用户行为检测,对某个关键功能检测用户的行为,超过一定次数没有检测到人类行为,永久封禁,具体方法大家可以自己设计,比如鼠标停留,轨迹等,设计的一定要隐秘,不然很容易被突破,一定要做好测试,防止误杀
7.对访问请求进行严重性评判,设立一下标准,如果某个ip情节特别严重,直接永久封禁,别看这条不起眼,但是效果非常好