[有趣的问题] 关于前端请求,后端服务如何做到只响应当前站点的请求。类似于如何防爬虫...。

2021-12-06 22:23:19 +08:00
 loveyou1

今天一个小伙伴问我:如何才能让请求能不能不饶过当前站点,比如:node 模拟当前站点的请求,是不被站点服务允许的。

我想了想:但是似乎并不行。

大佬们对这个问题有配方吗?剧毒那种 ^__^。

4780 次点击
所在节点    JavaScript
71 条回复
XiLingHost
2021-12-07 01:48:43 +08:00
实际上你可以理解为 vm over http
miaoge520
2021-12-07 01:53:46 +08:00
这个 cf 应该能解决的
binux
2021-12-07 01:54:36 +08:00
如果你不能控制客户端,则不能,因为你以为后端服务是和前端通信的,其实不是,前端是在指导浏览器和后端服务通信的。如果你无法控制用户使用的浏览器,任何人都可以使用对应的浏览器进行爬虫行为。
liuidetmks
2021-12-07 08:45:28 +08:00
@3dwelcome
@eason1874 浏览器是开源的,把这块 SSL 伪造的一样应该可以实现.
可以尝试使用 activeX npapi 对接口进行验签。

看你权衡了
eason1874
2021-12-07 09:13:56 +08:00
@liuidetmks #24 是的,只是增加难度。用无头浏览器跑爬虫,在设备环境上可以模拟得跟真实用户一模一样了,防它们只能靠行为风控意思意思
zxcslove
2021-12-07 09:14:06 +08:00
非游戏体验类的软件搞这一套真是.................
Juszoe
2021-12-07 09:35:59 +08:00
反爬和爬虫是成本战,没有绝对防御,如果爬虫的成本大于数据本身的价值,自然就不会有什么爬虫了
Te11UA
2021-12-07 09:46:21 +08:00
一般根据 cookies 做限速即可,没办法限制的
dxxzst
2021-12-07 10:04:36 +08:00
禁止接口跨域访问( Access-Control-Allow-Origin )可以避免接口任意被调用,但是如果直接以浏览网页的形式爬取(比如 puppeteer ),那基本无解。
wu67
2021-12-07 10:09:14 +08:00
上面已经说的很清楚了, 基本无解. 限定必须登录, 并且带 token 访问才正常返回资源就行了.
robinlovemaggie
2021-12-07 10:12:24 +08:00
最成熟的办法就是关闭 web 的流量,只接受 APP 请求,因为脱壳的难度和爬虫的难度不是一个数量级。
AyaseEri
2021-12-07 10:23:38 +08:00
Headless Chrome: 猜猜我是谁
loveyou1
2021-12-07 10:26:29 +08:00
teem
2021-12-07 10:27:18 +08:00
做过微信支付吗?看看微信如何防止伪装请求的。
loveyou1
2021-12-07 10:28:29 +08:00
看了大家的回复,总结就是基本无解,只能控制。
loveyou1
2021-12-07 10:29:38 +08:00
@teem 客户端不一样吧,他们自己搞了个浏览器,无头浏览器是不行的,其他方式也是能轻松拦截的。
teem
2021-12-07 10:38:06 +08:00
@loveyou1 拦截是可以...不是讨论怎么防止伪装请求吗?
loveyou1
2021-12-07 10:39:04 +08:00
@teem 那我也不可能写一个浏览器出来呀 v__v, 常规的,大家都能搞的。
teem
2021-12-07 10:49:33 +08:00
@loveyou1 可能聊岔了,微信除了自己调起收银台等内部请求可能是基于微信浏览器内核搞的,大部分都是可以通过 SDK/HTTPS 请求的,包括支付回调(微信主动请求你的服务器)都是暴露出来的。大体逻辑就是生签&验签,可以具体看看: https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_0.shtml
Itoktsnhc
2021-12-07 10:57:21 +08:00
反爬是个持久战,就是攻防双方看谁的成本高。
1. 先把限速什么的常规方法加上看下效果
2. 再然后触发条件的时候可以考虑返回随机生成的脏数据;
3. 复杂一点可以参考大众点评猫眼类的字体反爬。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/820478

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX