我能做到的最好的反爬虫策略

只要你的网站能通过浏览器合法访问,就不可能百分百的阻止爬虫,只能尽可能的去增加对方的爬虫代价。

由于工作原因,像某里系,某度,某字母站,某乎,某电影网站...等等的页面数据我都爬过。既然他们都防止不了,何况我们呢?

  1. 一般的反爬策略

前后端制定加密签名策略

前端每次发送请求的时候都携带一个动态签名,后端根据相同的规则生成签名,两下一对比,如果正确,放行,如果不正确,抛回非法请求

举例一种策略

  1. 前端每次都生成一个随机字符串比如 125432

  1. 前后端约定一个密钥 比如 secert123987

  1. 再加上一些常用的请求头 比如 User-Agent

  1. 当前请求的api地址 比如:"/api/user/get"

  1. 那么就是这样 :

{随机字符串}+{User-Agent}+{api地址}+{密钥}
125432Mozilla/5.0 (Windows NT 10.0; Win64)/api/user/getsecert123987
  1. 然后在对上面的一串字符串进行签名校验,比如md5。也可以用上面的密钥进行sha256,mac加密

  1. 其实每个签名加密都是有规则的,有经验的程序员,一眼都能看出来,不过最多的还是md5加密,因为最快

这个方式对老手没啥大用,因为再怎么样,你的签名策略也是摆在浏览器中的,仔细找肯定能找到

除非你自己研究属于自己的签名策略,不过按道理来说应该对大神也没用。

隐写术

添加0宽字符进行混淆

https://juejin.cn/post/6867319399947681806

这篇写隐写术的蛮好的

混淆js

不用多说,现在前端工程应该都有webpack和vite

不过混淆js的最大目的还是压缩前端代码,最防爬虫只是有很小的帮助。

robots.txt

君子协定,懂的都懂

验证码

每次请求都找后端要一个验证码,将验证码再进行签名策略,,不过对于爬虫人员来说也只是多了一步而已。因为请求验证码的api爬虫人员也是能看到的。

如果是图形化的验证码的话,就像StackOverflow等的,每次搜几个问题都会跳出来几张图片让你回答问题,判断你是不是机器人。,那该多烦人,我们的网站一般不会那样做的

应该没了吧?

  1. 用wasm进行签名生成

WebAssembly 对于传统的web开发而言,这个技术应该95%都用不到吧。

WebAssembly,简单来说其实就是将c语言,rust语言等高级语言编译成wasm文件,让浏览器直接就能用,,

那么。。。

我们可以用rust语言写加密策略,让js代码调用wasm生成签名,不但更加安全,而且签名策略用rust写,运行相比js会更快

也就是相当于将 加密策略 加密了一下。。好绕,我们是看不懂wasm文件中的内容的,也就不清楚加密策略了。

当然了,应该也是有工具将wasm再次反编译的,,我没去找哦,,,,哎~~~~~

rust语言编译成wasm

当然了,用c也可以。。我c早忘了。。

相关技术,

  1. rust

  1. wasm-pack

https://rustwasm.github.io/wasm-pack/installer/

将rust编译城wasm的工具

  1. vite-plugin-wasm-pack

引入wasm的工具

自己捣鼓吧

  1. 字体加密

上面的所有所有都躲不过一个东西,就是python的Selenium,或者java的jcef之类的自动化爬虫,就是人家真的就是打开了一个网页,这怎么防啊。

那就将网站上的文字加密吧,现在好多网站都有这种策略

效果

上下两排的文字是不一样的哦,,

  1. 首先你需要下载一些需要加密的字体,不用下全,因为我们不可能将中国很多很多的汉字全加密,那样的话光下载字体文件就要占网站很大的流量,一般就英文+数字就可以了,格式可以为 fft woff woff2

2、用FontCreator这个工具更改掉原始的unicode编码,

比如 16进制的30 代表0 我们可以改成16进制的59910

  1. 然后将你需要加密的文字的编码改成自定义的编码就好了

比如0的流程就是

\u0030 ->0 -> '&#59910'

我是写了一个转换的指令directive,

第一次写,不知道什么才是最好的,就不展示directive代码了,

但是肯定不能将后台的所有api的数据全部转换一遍,,那样应该好浪费性能,也没必要,只需要将重要的文字内容加密一下就好了

  1. 添加字体属性

@font-face {
  font-family: 'XXXXX';
  font-size: 16px;
  src: url('../fonts/XXXX.woff2');
}

然后再转换后的内容标签上加上 style css属性font-family:XXXX就好了啦啦啦啦。

又要泼冷水了

上面的还是不能防止爬虫,因为我们可以将网站上的字体文件下载下来,一分析,就知道哪个是哪个了,,,,~~~~,,

而且如果实我,我还会用谷歌插件去爬虫,在api显示到页面之前就给你拦截掉,

  1. 限流、ip黑名单做起来。~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

布蕾烧仙草

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值