1 jiuhuicinv 14 天前 UA? |
![]() | 2 shuiduoduo 14 天前 via iPhone 无解 |
![]() | 3 leokun OP @jiuhuicinv 这是最容易模拟的 |
![]() | 4 shuiduoduo 14 天前 via iPhone ![]() 各种无头浏览器 |
5 pingdog 14 天前 via Android 买 ip 库,检测到 proxy/idc 跑 js PoW ,captcha 验证码,加 fingerprint 差不多了,再搞多就不化算,防的成本多于攻 |
6 fyq 14 天前 用户雇个大学生手动操作也就 3000 一个月 |
7 iOCZS 14 天前 不能,只能结合行为做上下文分析 |
![]() | 8 leokun OP 想到一个麻烦的办法,也是爬虫模拟与真实操作的本质区别 在访问网页时,真实的业务访问是连续的,间隔的,同一个用户在特定的业务中是不可能出现并发的,即使用户模拟 js 很厉害,但是在模拟业务次序,调整请求间隔上很难做到与真实用户一样 |
![]() | 9 wy315700 14 天前 |
10 longzhou6431 14 天前 可以考虑拒绝掉新建连接的第一个请求包,这样可以确保地址不被探活 |
11 Donahue 14 天前 浏览器 ja3 签名/浏览器指纹之类的 |
![]() | 12 MYDB 14 天前 via iPhone ![]() 这属于攻防了,对方水平很高,那建议花更多的钱请个高人或者找业内顶尖团队,否则记录日志就能挡住一些新手写的爬虫了 |
![]() | 13 nekoneko 14 天前 无解 最多是对前端请求做个摘要, 后端接到后进行验证, 这个只能提高门槛 另外就是加蜜罐, 这样能知道哪些用户是不正常的. |
![]() | 14 lambdaq 14 天前 用户模拟 js 的水平很高? 用户直接上无头浏览器! |
15 triptipstop 14 天前 调用 GPU 不给用的 直接怕黑 |
16 voidemoer 14 天前 比较有效的方法一是带上各种人机交互验证,二是监控用户鼠标轨迹 但是对抗情形下,都有破解的方法:第三方解码、多轨迹回放,只不过会大大增加攻击者的成本 |
17 deplives 14 天前 你说的这个无非就是反爬,没有最终的方案,都只是攻防而已 |
![]() | 19 yianing 14 天前 via Android 无解,人家用无头浏览器,ai 操作 |
![]() | 20 miyuki 14 天前 无非猫捉老鼠,后台搞个无头浏览器 |
![]() | 21 ejin 14 天前 油猴脚本,请求完全是浏览器发出和渲染,你怎么破,哈哈哈 |
22 laggage 14 天前 hmmm, 不能加验证码吗,请求前 js 弹出验证码框,验证通过才给请求? |
![]() | 23 play78 14 天前 定时更新前端代码和后端接口及加密请求方式,业务流程。只要你改得足够快,模拟的人就跟不上。 很简单,你前后端稍微改一下业务流程,逆向的人,要花 10 倍的时间去梳理。只要成本与收益不匹配。就没人去做。 |
![]() | 24 duanxianze 14 天前 不可能的,只能用各种人机验证,验证码来预防 |
25 Rickkkkkkk 14 天前 用户直接手点浏览器你感觉能区分吗? |
27 zachariahss 14 天前 单请求没办法,请求前的页面渲染状态,埋点,加载状态,鼠标轨迹,行为逻辑分析,一系列东西去判断,但是防不住真想和你做对抗的人....这东西都是一整个团队用上各种手段去尝试,对抗,没啥一劳永逸的办法 |
![]() | 28 akakidz 14 天前 本质上,这类问题没有绝对的防御手段。对抗方式往往是一个“试错博弈”的过程,如果用户的试错成本足够低,那么无论你做多少防护,他总能找到突破口。关键在于如何提高用户的试错成本,而不是通过技术手段杜绝爬虫 |
![]() | 29 Ketteiron 14 天前 这个问题等价于如何防止爬虫 答案是防不了 人机验证 通过接码平台解决 五秒挑战,参考 Cloudflare 5 秒盾,浏览器静默执行一段 js 脚本,识别当前是否是正常环境 通过无头浏览器解决 浏览器指纹验证 https://github.com/fingerprintjs/fingerprintjs 但它是开源的,攻击者依然可以想办法绕过 tls 指纹识别,cloudflare 等云厂商通过对所有开源请求库做特征库,能识别一个请求是否通过浏览器正常发送,甚至能识别无头浏览器 但可惜可以无头浏览器+伪造特征 再来就是老一套的混淆接口加解密 没啥用,5 分钟以内就能破 |
![]() | 30 MHPSY 14 天前 有一个 brightdata ,可以搜索一下 他们提供完整的无头浏览器远程的方案,包括自动过验证码,自动过 5 秒盾,几乎只需要写拿数据的业务逻辑就可以了,很方便。 很难爬的数据我就用这个搞,基本都能搞定 |
![]() | 31 Ketteiron 14 天前 人机验证算是最有效的防护手段了,双方硬拼钱包,但已经渐渐出现 AI 接码服务,攻击者成本会越来越低。 |
32 dddd1919 14 天前 也可以 RPA 操作浏览器,无解 |
36 AutumnVerse 14 天前 via iPhone 直接上 cf 盾,如果这都被破解,那就认了吧 |
![]() | 37 bzw875 14 天前 通通加上人机验证,图片验证码 |
![]() | 38 lavvrence 14 天前 https://lawrenceli.me/blog/cloudflare#client-hello---ja3 基于 TLS 的 JA3/JA4 指纹。 |
39 felixsama969 14 天前 被针对是无解的 |
![]() | 40 hahahalololo 14 天前 @Ketteiron 5 分钟!!大佬!!!我碰到 js 混淆加密,经常看半天都找不到破解方法 |
![]() | 41 kxg3030 14 天前 以前还有 tls 指纹的 现在 也是轻松过了 放弃吧 |
43 macaodoll 14 天前 我就是做爬虫的,无解 |
44 dode 14 天前 查看 UA ,操作系统,HTTP 请求头 |
45 dode 14 天前 统统随机人机验证验证码 |
![]() | 46 mightybruce 14 天前 |
47 DimensionalBoy 14 天前 你防住我的同时也会防住某些客户,然后客户:你的产品真难用 |
48 hnliuzesen 14 天前 TLS 握手指纹,不过可以模拟 |
![]() | 49 iorilu 14 天前 为什么要模拟 js 现在都是直接程序控制浏览器阿, 确实都是浏览器的访问 |
50 unused 14 天前 浏览器是啥 |
51 whp1473 14 天前 这个不能完全实现,但如果你希望是从自己的产品网页发出则是可以实现的,可以通过 js 代码记录全面的用户行为记录,然后发送行为记录数据,比如鼠标的移动、颤动、停顿、页面的切换等等,模拟成本无限拔高。 |
![]() | 52 Kinnice 14 天前 via Android 埋暗点,比如某几个.js/jpg 返回是 js/jpg 内容,但是实际是后端用来检测是不是爬虫的一个暗点 需要配合:别直接 ban 对方指纹,而是随机延迟返回,接口随机 50x 报错,假数据 只针对那种纯发包的爬虫场景,模拟浏览器的还要结合浏览器指纹/ip/一些 hack api ,随机的高级别验证码等 |
![]() | 53 KagurazakaNyaa 13 天前 https://github.com/TecharoHQ/anubis 上阿努比斯,每个请求都要计算,正常用户在一个设备上不会有很高频率的请求,爬虫才会 |
![]() | 56 cheng6563 13 天前 要求客户客户端挖个矿 |
![]() | 57 linxiaojialin 13 天前 @Ketteiron 你好,请教一下,假如需要长时间(例如 24 小时不间断地)爬取一个电商的页面,而它有 CF 盾,同时要和其他人抢购不定时刷新出来的秒杀商品,请问有办法确保不会被屏蔽并尽量抢购到商品吗? |
![]() | 58 dosmlp 13 天前 无解,反正什么样的数据都可以伪装 |
![]() | 59 aino 13 天前 ![]() 好事,攻防对抗 无休无止 又可以让老板多投点资源进来了 |
61 artiga033 13 天前 via Android ![]() 要不人脸识别吧,也别管是人还是自动程序了,反正你就要求个人坐在摄像头前面 |
![]() | 62 byasm32 13 天前 29 楼总结的挺完整的了。 |
64 liudewa 13 天前 @Ketteiron #55 https://m.wandacinemas.com/login 大佬登录流程跑通 |
![]() | 66 EndlessMemory 13 天前 行为轨迹 |
![]() | 67 yb2313 13 天前 唯一的办法就是行为监测,但这很容易误伤正常用户,检测是否是人类的算法再完美也没用,到最后就是猛弹窗验证码,肥了打码平台,公开数据真那么重要还不如直接开放合理定价(不合理人家还是选择爬)的 pai 付费接口,钱捞到才是真的。 |
![]() | 68 viking602 13 天前 其实无解 你只能从用户行为上进行判断 比如短时间内获取了大量数据这种很大概率是有问题的 |
![]() | 70 Ketteiron 13 天前 @linxiaojialin #57 可以实现,js 逆向是基本功,摸清用户行为控制的级别和边界,看情况上分布式、退避算法、接入 AI 。 为了不给灰产送子弹,不会提供具体细节。 |
![]() | 71 Ketteiron 13 天前 @yb2313 #67 接入 AI+MCP 后行为监测也没用了,cloudflare 现在是用 AI 去识别用户是否是 AI ,识别率感人,喜欢用纯键盘(比如我)翻网页的人几乎被误伤到没法用了。 |
74 Huelse 13 天前 最简单的就是加验证码,有个验证码方案是 hash 算力检测,无头浏览器基本过不了,可以访问 openwrt.org 看看。 然后就是链接行为检测了,TLS 握手、指纹等等,这方面最擅长的是 GFW... |
![]() | 75 Ketteiron 13 天前 ![]() @liudewa #72 请求验证码接口 电话号码明文,得到 requestID 请求登录接口,也全是明文,然后直接就登进去了 后续看了下改地址、选电影院也没有什么问题 兄弟,你不会连构造 cookie 都不会吧,玩这套流程让我回到了二十年前。 |
79 yulon 13 天前 这个方向是错的,客户端 0 信任 |
![]() | 80 pocketz 13 天前 在互联网上,没人知道你是一条狗.jpg |
81 wangtian2020 13 天前 没有任何办法,一个东西他像用户,那他就是用户 |
![]() | 84 andforce 13 天前 cloudflare 验证码 可以识别是用户还是模拟,我至今没找到能破解的方法。 用无头浏览器也不行,还是你能识别是不是人类 |
![]() | 86 hereIsChen 13 天前 以前听过一个方法,防无头浏览器,就是页面内弄一个隐藏的 a 标签,普通用户是看不到的; 如果这个标签被访问了,就肯定不是正常访问到的 |
87 Dora112233 13 天前 页面放个隐藏图片,没加载过图片的就是非浏览器访问。 |
![]() | 88 ljl024 13 天前 |
![]() | 89 realpg PRO 高级点的机器人检测都是公司最核心的知识产权价值... 为什么总有人觉得去论谈发个帖就能拿到... 这玩意给个思路的价值都很离谱 |
90 xiaojie668329 13 天前 我直接 CDP 操作浏览器,你如何应对 |
![]() | 91 wjpauli 13 天前 你可以研究下指纹技术 |
92 ExplodingDragon 12 天前 playwright 搭配 chrome cdp 拦截掉暴露的接口几乎无解,任何用户操作均可模拟,做并发限制不把服务搞崩就行 |
![]() | 93 oyama 12 天前 via iPhone ja3 已经能绕了,虾皮就是用的 ja3 ,老好绕了 |
![]() | 94 777777 12 天前 必须登录,然后验证手机号,增加攻击者成本,想爬的多就要加钱买账号 |
![]() | 95 llsquaer 12 天前 生成一万个 js 不同 key 的加密脚本可以防脚本。但如果是模拟的话还是得增加前端逆向难度。不过高手基本能跑的过。就算这些都防住了。能防按键精灵之类的么?看来还是不得行。 |
![]() | 96 kuanat 12 天前 ![]() 这个话题属于懂行的不愿意讲(毕竟多数都会涉及黑灰产),而不懂的基本说不到重点的那种。我就简单总结下算是抛砖引玉了。 浏览器从来都不是可信环境,理论上没有任何办法可以稳定 100% 准确区分真人和机器。 对抗爬虫或者 bot 的基本思路就是提高攻击成本。比如登录之后才能看的,就有帐号成本,限制访问频率的,就有 ip 成本,甚至 cf 五秒盾也可以理解为采集时间成本。 想要提高攻击者的成本,那防御方也要付出代价,比如设想个极端场景,防御方要求所有请求都过一遍 recaptcha ,那防御方确实提高了攻击方的打码成本,但自己也付出了带宽成本,以及造成不便损失正常客户的成本。所以防御方更希望的是,有纯软件的方案,只付出开发成本和少量的运营成本,就能大幅提高攻击者成本的方法。于是就有了各种检测技术。 我这里随便列举一些常见的技术,以及攻击方的应对策略: 1. tls 指纹检测 因为浏览器和常见 python/go 等编程语言的底层 tls 库是不一样的,通过在流量入口做 ssl offloading 的时候,顺便检测一下请求中的 kex (密钥交互)配置,就能起到很好的筛选作用。 应对方式也比较简单,替换 tls 库或者伪装成特定的指纹配置即可。 2. 额外校验字段 同样是针对看请求直接构造接口数据的。在常规业务字段之外增加校验字段,一般由 js 代码执行后产生。 这种可以通过 cdp 控制浏览器或者跑无头等方式绕过。 3. 浏览器环境检测 基本上是前一种方法的增强版。既然攻击者能用真浏览器来伪装,那就检测那些不合理的参数,比如窗口 viewport 大小,一些特定的全局对象等等。到了这一步,基本上标配都是 js 混淆了。 对于水平不高的检测,有经验的攻击者大部分能根据调用栈定位到关键函数方法,绕开检测逻辑直接生成校验字段。 4. js vmp 混淆 基本上这就是最后的防线。把前面各种检测技术打包起来放到 js 中,然后用 js 代码写个虚拟机,再把原始的代码编译成虚拟机指令。这个对抗手段是针对人的,就是拉高对攻击者的技术门槛要求,逆向 vmp 类混淆是要比前面都难的。 从攻击者的角度来看,硬怼 vmp 还原 ast 指令也不是不行,就是累,而且没办法保证这次逆向出来了能用多久。毕竟防守方的策略是,换个混淆参数就是新虚拟机了。 所以多数情况下都是把 js 代码完整扒出来,把它当黑盒来调用。因为外部 js 环境和浏览器不一样,缺少浏览器的很多对象,所以有个专门的说法叫“补环境”,让 js 代码能正常运行。想要知道 js 代码都检测了哪些环境信息,又有一些插桩、自吐的应对策略。 就算实在搞不定,专门搞一个浏览器,就真实地跑校验字段生成,然后把结果给其他自动化的部分用也可以。 大致上就是这样了。对抗的路线最终都会转换成为“对抗成本”的问题。而且从技术原理上说,攻击方是永远可以看到代码的(尽管可能是混淆版本),所以根本藏不住。 |
97 streamrx 12 天前 via iPhone 这东西是非常复杂的一套方案 |
![]() | 98 ragnaroks 12 天前 这个问题本质上是怎么在客户端做防御,看看网络游戏清一色上内核级反作弊就知道是不现实的了 |
99 lnbiuc 12 天前 TLS 指纹 JA3 指纹 JA3S 指纹 |
![]() | 100 y1y1 12 天前 via iPhone 楼上大牛那么多,谁来教教我怎么过 cf 验证? |