对于爬虫,各大搜索厂商都有公布自家 bot 所使用的 IP 段,把这些 IP 段加入白名单放过。
其他的访问,未登录的就像阿里系那样,点两下就来个验证码 😄
使用手机号或者微信验证注册,对于已登录的,就限制每秒请求数,加个限流,对于异常的用户直接封停账号。
可能完全不影响爬虫,想要完全不影响正常用户不可能的
我现在中间件校验,只针对需要保护的资源路由
先收集搜索引擎的IP,host命令确认之后,IP段放到白名单里,不做处理,基本上几天就能收集全了
不在白名单里的
先记录ip,ua,asn,以及header的referer,然后每天awk统计一下
laravel开configureRateLimiting
,频繁访问的返回429,然后统计429的状态码,不正常的多加验证码
之后收集数据先按照asn屏蔽,这个很好用,效果不错,直接把阿里云,腾讯云,amazon,ms,ovh,都屏蔽了
然后有些爬虫写的很随意,ua都不设置的,比如
android [2-6] ,os x 10_[0-9],Windows 98/CE/NT [1-4]
,直接屏蔽/跳验证码,还有请求头数量就45个的,肯定不正常,屏蔽,常见的ua,curl/wget/python也屏蔽
在往后就是代理池的问题,有的代理池是不停拨号,ip总在一个范围内波动,这种屏蔽
还有一种代理池是肉鸡程序,用的家宽,分析日志判断爬虫和真实用户的大致比例,设定一个威胁值和危险期,危险期内用户每次访问威胁值增加,达到阈值就验证,用户通过就session给个安全期,安全期内不认证,通过的同时降低总的威胁值
最后说下验证码,你那个验证码没用的,免费的ocr就搞定了,推荐给你个验证码破解项目,你可以测试你的验证码,带带弟弟https://github.com/sml2h3/ddddocr
头里面加一些连七八糟的验证信息,发现验证信息不对或者没有直接404就行了,验证信息包括用户token,请求参数,请求类型,请求路径,请求时间,请求签名等,然后中间件进行验证 只是增加爬取成本,同样无法阻止
PHP可以通过以下几种方式来防止采集:
- 设置HTTP反盗链:可以在服务器端设置HTTP反盗链,禁止除了指定来源以外的网站访问本网站的图片和资源。
- 设置User-Agent限制:可以在服务器端设置User-Agent限制,禁止除了正常浏览器以外的爬虫访问本网站。
- 设置IP黑名单:可以在服务器端设置IP黑名单,禁止除了指定IP以外的用户访问本网站。
- 设置滑动验证码:可以在服务器端设置滑动验证码,禁止机器人自动提交表单。
在判断是爬虫、搜索引擎、用户浏览时,可以通过检查HTTP请求头中的User-Agent字段来判断是否是爬虫、搜索引擎或用户浏览。
具体来说,可以使用如下的方法来判断:
- 爬虫:爬虫一般会模拟浏览器的行为,但会在User-Agent字段中添加特定的标识,例如"Googlebot"、"Baiduspider"等。因此,可以在检查User-Agent字段时,判断是否包含这些标识,来判断是否是爬虫。
- 搜索引擎:搜索引擎一般也会模拟浏览器的行为,但会在User-Agent字段中添加特定的标识,例如"Googlebot"、"Bingbot"等。因此,可以在检查User-Agent字段时,判断是否包含这些标识,来判断是否是搜索引擎。
- 用户浏览:用户浏览时,一般不会在User-Agent字段中添加特定的标识。因此,可以在检查User-Agent字段时,判断是否包含特定的标识,如果不包含,则可以判断为用户浏览。
此外,还可以通过检查请求的频率、请求的行为等因素,来进一步确定是否是爬虫、搜索引擎或用户浏览。
推荐文章: