反爬虫一些方案总结和尝试

使用 FontCreator 尝试修改了 Rookie 字体,简单实现了 字体混淆 实际运用可以考虑项目是否需要防爬?进而思考产品信息是否需要混淆?

混淆

一、了解主流语言爬虫框架和爬虫原理

原理

文章并没有统计 nodejs ,补充下 node 也有的

框架具体介绍就不说了,各有千秋,详情可参考 各大主流编程语言-常用爬虫框架以及优劣分析

原理说明:

  1. 发起请求:通过 HTTP 库向目标站点发起请求,即发送一个 Request ,请求可以包含额外的 headers 等信息,等待服务器响应。

  2. 获取响应内容:如果服务器能正常响应,会得到一个 ResponseResponse 的内容便是所要获取的页面内容,类型可能有 HTMLJson 字符串,二进制数据(如图片视频)等类型。

  3. 解析内容:得到的内容可能是 HTML ,可以用正则表达式、网页解析库进行解析。可能是 Json ,可以直接转为 Json 对象解析,可能是二进制数据,可以做保存或者进一步的处理。

  4. 保存数据:保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。

二、rate limit, user-agent过滤

为防止滥用,应该考虑对 API 限流。 例如,可以限制每个用户 10 分钟内最多调用 API 100 次。 如果在规定的时间内接收了一个用户大量的请求,将返回响应状态代码 429 (这意味着过多的请求)。

连接限制

三、并发连接数

使用 Nginx 限制单个 IP 的并发连接数能够减少一些采集程序或者 DDOS 的攻击。

LNMPNginx 配置中已经添加了部分代码,可以编辑 /usr/local/nginx/conf/nginx.conf 文件

注明下面的设置需要在 1.1.8 以上版本的 Nginx 的设置才有效的

查找:

将前面的#去掉,没这一行的,话加上

默认情况下,如下图所示位置: Nginx

再在要设置限制连接数的虚拟主机配置里的 server 段里添加上

如下图实例截图:

限制

限制每个连接速度为 100K ,此限制是针对单个线程,比如,我用IE下载是 100K ,当用迅雷时它会占用 2 个线程,所以迅雷下载速度为 200K ,如果单个IP的并发数设置为 10 ,则多线程下载的话速度可以达到 100K × 10

最后运行 /usr/local/nginx/sbin/nginx -t 测试配置是否有错误,如没有错误执行:

重载配置使其生效

四、字体混淆

一些大网站为了反爬,使用了字体混淆,比如天眼查,去哪儿网

  1. 文字混淆 天眼查

  2. 数字混淆 去哪儿网

五、使用Fail2ban

使用 Fail2ban 禁止垃圾采集爬虫,保护 Nginx 服务器

  1. 创建过滤规则 Fail2ban 使用前必须有过滤规则,创建规则 nginx-badbots.conf

    内容如下:

    默认 badbots 没有很多,而且比较老,根据自己需要我又添加了下,同时也检查过滤空的 user agent

  2. 检查过滤规则

    检查正则表达式写的对或者不对,可以使用 fail2ban-regex 命令,具体用法如下所示。

  3. 创建 jail 规则

    SSH 等一样,单独创建 nginxjail 规则文件。

    例如:

    这里可以指定多个日志文件的路径.

  4. 重启 fail2ban

    查看 iptables 规则是否生效

参考

Last updated

Was this helpful?