今天一个小伙伴问我:如何才能让请求能不能不饶过当前站点,比如:node 模拟当前站点的请求,是不被站点服务允许的。
我想了想:但是似乎并不行。
代码上撒毒,生成一些自定义请求头,生存的过程代码,通过压缩混合。后端验证。 [也存在破解的可能]
通过特殊请求头,host ,origin ,referer [可以写入,不管用]
大佬们对这个问题有配方吗?剧毒那种 ^__^。
1
jmllx1963 2021-12-06 22:28:44 +08:00 1
有个小想法,如果是可以登陆的,登录后建立一个 websocket 连接,请求需要 websocket 连接且 token 匹配才可以放行。🤣
|
2
wunonglin 2021-12-06 22:29:21 +08:00
月经贴了。答:不能
|
3
jorneyr 2021-12-06 22:33:17 +08:00
必须登录才让访问,登录时使用 IP 、浏览器版本、agent 等各种数据一起生成 token ,服务器判断只有有效的 token 才允许访问,其他人拿到 token 也访问不了。
|
5
loveyou1 OP @jorneyr
1. 必须登陆才能访问,我登陆完,就拷贝 cookie ,这些参数在 node 发起写进去,其实也没啥用啊, 2. 前端生成的 token ,后端如何校验。 上述的两个方式,我只要知道一个请求,我就能通过 node 在重新发一遍吧...。 |
6
ZE3kr 2021-12-06 22:41:33 +08:00 via iPhone
用 webassembly 加密请求
|
7
eason1874 2021-12-06 22:43:17 +08:00
HTTP Headers 太容易伪造了,加入 SSL 检查,不是常见的就要求验证,验证 Cookie 跟 SSL 信息绑定,这样在浏览器验证过再复制 Headers 去给爬虫工具用也不能行
设备风控只是增加难度,防不了那些用无头浏览器采集的。行为风控比较重要,看看某宝,动不动就让你验证,验证过了,多访问几个页面又让你验证 |
8
ericls 2021-12-06 22:47:31 +08:00 via iPhone
HTTP 是 stateless
|
9
loveyou1 OP @eason1874
这句话能说扽具体点吗,不太理解实现的过程 :验证 Cookie 跟 SSL 信息绑定,这样在浏览器验证过再复制 Headers 去给爬虫工具用也不能行。 看看某宝,动不动就让你验证,验证过了,多访问几个页面又让你验证: 几个页面多次验证就是 IP 和请求次数。但我了解的验证,后端生成不包含前端逻辑的是可以做到不能绕过的,比如后端直接生成验证码图片,但是比如什么前端验证码,滑块啊,这些都是前端做的,本质上都是能从接口拿到验证码,或者直接绕过的吧。 |
10
loveyou1 OP @ZE3kr 了解过一点,没有具体应用的地方,不知道我说的对不对,这玩意就是通过 C C++来写一些 js 函数,但是本质上加密的过程,node 端也能模拟吧。
|
12
dcsuibian 2021-12-06 23:08:35 +08:00 2
答案是,不能。再怎么做也只是增加成本罢了,完全防住很难,收益太低
不说普通的发送 http 请求了,如果用 Puppeteer 和 playwright 这种模拟用户操作浏览器的爬虫能怎么防呢 |
13
zyEros 2021-12-06 23:17:08 +08:00 via Android
可以试试对于频繁请求的用户或 IP 加个人机识别验证,比如友验( fastyotest.com )
|
15
agdhole 2021-12-07 00:05:22 +08:00
给用户一个远程桌面(
|
16
3dwelcome 2021-12-07 00:27:47 +08:00 via Android
以前讨论过,ssl 指纹技术可防。
node 和浏览器的 ssl 指纹是完全不一样的。 |
18
ch2 2021-12-07 00:39:02 +08:00
剧毒方法只能是以误杀普通人为代价,进行严格的风控
不过如果你数据很少的话这个就是纯粹恶心普通用户,因为高手终究是能把你的数据全拿走的 |
19
eason1874 2021-12-07 01:28:54 +08:00 1
@loveyou1 #9 HTTP 是应用层,SSL/TLS 是传输层,HTTP 请求工具通常不关心 SSL 的具体过程
所以当你从 Chrome Copy as cURL 去 Shell 发起请求的时候,你只是复制了一个完整的 HTTP 请求,并不包括 SSL 的部分,而不同软件的 SSL 支持是不一样的,于是乎你可以通过一些 SSL 信息判断出设备发生了变化,比如 $ssl_ciphers 和 $ssl_curves |
20
XiLingHost 2021-12-07 01:48:01 +08:00
每次由服务器端编译并签名生成限时可用的二进制指令流发送到客户端执行,然后由它来负责解析用户的请求,每个请求完成都重新生成新的密钥对和更换请求解析逻辑,这样用户如果想要逆向就必须在会话有效期内完成二进制逆向工程
你可以连带鼠标和键盘消息事件相应和图像绘制都由你下发的二进制指令来完成 |
21
XiLingHost 2021-12-07 01:48:43 +08:00
实际上你可以理解为 vm over http
|
22
miaoge520 2021-12-07 01:53:46 +08:00 via Android
这个 cf 应该能解决的
|
23
binux 2021-12-07 01:54:36 +08:00
如果你不能控制客户端,则不能,因为你以为后端服务是和前端通信的,其实不是,前端是在指导浏览器和后端服务通信的。如果你无法控制用户使用的浏览器,任何人都可以使用对应的浏览器进行爬虫行为。
|
24
liuidetmks 2021-12-07 08:45:28 +08:00
|
25
eason1874 2021-12-07 09:13:56 +08:00
@liuidetmks #24 是的,只是增加难度。用无头浏览器跑爬虫,在设备环境上可以模拟得跟真实用户一模一样了,防它们只能靠行为风控意思意思
|
26
zxcslove 2021-12-07 09:14:06 +08:00 1
非游戏体验类的软件搞这一套真是.................
|
27
Juszoe 2021-12-07 09:35:59 +08:00 2
反爬和爬虫是成本战,没有绝对防御,如果爬虫的成本大于数据本身的价值,自然就不会有什么爬虫了
|
28
Te11UA 2021-12-07 09:46:21 +08:00
一般根据 cookies 做限速即可,没办法限制的
|
29
dxxzst 2021-12-07 10:04:36 +08:00
禁止接口跨域访问( Access-Control-Allow-Origin )可以避免接口任意被调用,但是如果直接以浏览网页的形式爬取(比如 puppeteer ),那基本无解。
|
30
wu67 2021-12-07 10:09:14 +08:00
上面已经说的很清楚了, 基本无解. 限定必须登录, 并且带 token 访问才正常返回资源就行了.
|
31
robinlovemaggie 2021-12-07 10:12:24 +08:00
最成熟的办法就是关闭 web 的流量,只接受 APP 请求,因为脱壳的难度和爬虫的难度不是一个数量级。
|
32
AyaseEri 2021-12-07 10:23:38 +08:00
Headless Chrome: 猜猜我是谁
|
33
loveyou1 OP |
34
teem 2021-12-07 10:27:18 +08:00
做过微信支付吗?看看微信如何防止伪装请求的。
|
35
loveyou1 OP 看了大家的回复,总结就是基本无解,只能控制。
|
39
teem 2021-12-07 10:49:33 +08:00
@loveyou1 可能聊岔了,微信除了自己调起收银台等内部请求可能是基于微信浏览器内核搞的,大部分都是可以通过 SDK/HTTPS 请求的,包括支付回调(微信主动请求你的服务器)都是暴露出来的。大体逻辑就是生签&验签,可以具体看看: https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_0.shtml
|
40
Itoktsnhc 2021-12-07 10:57:21 +08:00
反爬是个持久战,就是攻防双方看谁的成本高。
1. 先把限速什么的常规方法加上看下效果 2. 再然后触发条件的时候可以考虑返回随机生成的脏数据; 3. 复杂一点可以参考大众点评猫眼类的字体反爬。 |
41
loveyou1 OP @teem 聊岔了,聊岔了...。 你说的是防止伪装请求,安全问题。 我问的是如何只响应当前站点的请求,爬虫类问题。看了文档,文档是解决安全的问题,并不能防止通过其他方式这个实现这个过程。
|
42
loveyou1 OP @liuidetmks 看起来双方都无解,都看成本。
|
43
loveyou1 OP |
44
shyangs 2021-12-07 12:42:15 +08:00
用 chrome 插件寫的爬蟲,要怎麼防?
|
45
2i2Re2PLMaDnghL 2021-12-07 12:55:35 +08:00
终极命题:如何防止人工爬虫?就是雇用一百个廉价小时工,不断地访问你的网站并把信息抄录下来
次终极命题:如何防止小叽访问你的网站? |
46
yaphets666 2021-12-07 13:44:24 +08:00
@loveyou1 频繁的请求某个接口就人机验证,都是这么干的
|
47
fisherman0459 2021-12-07 14:01:32 +08:00
可以考虑字体混淆(随机字体生成+随机映射+随机字体扭曲)+定期更新随机策略.
不过也是防不了人工和 OCR, Fingerprints + 限流 + 代理池检测可能有点帮助. 如果只针对登录用户的数据请求, 以上策略绑定到用户再加上接口流量检测及时账号自动管控这样应该能防止大部分的异常请求吧. |
48
enrolls 2021-12-07 14:03:23 +08:00
参考友商做法,淘宝是如何做到的?
人类和爬虫之间有何差异,时间间隔(频率)? 投毒?友军定时访问瞄点? Referer 有什么骚操作? 浏览器与程序代码的访问差异? Chrome ,Firefox 的请求头是如何排序的? |
49
fisherman0459 2021-12-07 14:09:29 +08:00
觉得爬虫这件事如果从爬取事件本身入手可能会好一点.
感觉数据都可以造,低成本数据像 headers 这种造起来成本很低, 防起来感觉意义不是特别大, 但是如果数据本身的造假难度很高的话, 可能很容易会影响正常的用户使用体验. |
50
aino 2021-12-07 14:10:47 +08:00
借楼问一下吧,tls 指纹怎样绕过,伪造 tls 指纹啥的没过,不知道是不是我姿势有问题,某云盾
|
51
fisherman0459 2021-12-07 14:12:36 +08:00
@aino #33
|
52
aino 2021-12-07 14:13:25 +08:00
@fisherman0459 #51 已经沾染过了,没过,不知道是不是我姿势问题,还是说目前某云盾升级了策略
|
53
Kinnice 2021-12-07 15:10:41 +08:00
web 远程桌面
打开你的 url 是一个远程桌面,远程桌面里面开着你的网页,不可切换不可退出。 |
57
loveyou1 OP @enrolls
人类和爬虫之间有何差异,时间间隔(频率)? 现在都在搞 AI 了,这个时间间隔,基本可以模拟出像人的操作吧。 投毒?友军定时访问瞄点? Referer 有什么骚操作? 不懂:友军定时访问瞄点 不懂:Referer 有什么骚操作? 是指? 浏览器与程序代码的访问差异? 现在基本没啥区别吧 Chrome ,Firefox 的请求头是如何排序的? |
58
Kinnice 2021-12-07 15:29:32 +08:00
@loveyou1 不能,相当于部署在这个远程桌面所在机器的内网。 有部分业务还真是这样。拦截了常见的各种快捷键,也别想什么调试。甚至连 url 栏都不让你看见。
|
60
vacuitym 2021-12-07 15:33:58 +08:00
rsa 加密
|
64
loveyou1 OP @yaphets666 我一直对于人机验证存在质疑,人机验证的过程需要调接口或者前端创建,人机验证的结果是去调接口,我为啥不能直接绕过这一步。
比如: 数字验证码,如果是前端生成的,那一点意义没有,我直接就可以绕过,如果后端返回的,我从接口里面也可以拿到,然后绕过去。 滑块验证码,人机验证码,不是类似吗 我觉得有用的是,后台直接返回一个图片,前端可能难一点的需要通图像识别去做,或者短信是最靠谱的,但是有成本。 |
65
yaphets666 2021-12-07 15:55:36 +08:00
@loveyou1 验证码当然不是前端生成的,是后端返的,而且验证码确实是图片.
上面大佬们说的很清楚的,什么方法都有破解的办法,只是增加成本. 比如说你说的图像识别,我可以给图片加干扰项,并且的各种各样的干扰每隔一段时间就换一种,你就得一直修改程序. 但是我作为官方,比如说淘宝,我可承受的成本是比你大的多的.所以你爬不了淘宝的东西. |
66
lakehylia 2021-12-07 16:04:11 +08:00
@2i2Re2PLMaDnghL 验证码搞个高数题或者微积分题,你总不能雇几百个数学很好的大学生吧
|
67
0o0o0o0 2021-12-07 16:22:55 +08:00
|
70
agui2200 2021-12-07 17:42:48 +08:00
fingerprintjs 可以识别一丢丢
|
71
pkoukk 2021-12-07 17:54:04 +08:00
如果是小网站,想一个别人都没用过的奇葩手段,增加反爬成本就行了。
上面猫眼那个 css 加密想法就不错, 之前站里有个老哥弄过图片加密,好像是把 js 文件伪装成图片放到 cdn 上,收到图片之后再重新解析回 js 加载。 搞点这种类似的东西,只要你没有特别大的价值,就没人闲的没事爬你了 |