V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leokun
V2EX  ›  浏览器

如何知道网络请求是从浏览器发出的

  •  
  •   leokun · 15 小时 55 分钟前 · 3678 次点击
    用户模拟 js 的水平很高的情况下
    57 条回复    2025-09-26 03:08:22 +08:00
    jiuhuicinv
        1
    jiuhuicinv  
       15 小时 54 分钟前
    UA?
    shuiduoduo
        2
    shuiduoduo  
       15 小时 53 分钟前 via iPhone
    无解
    leokun
        3
    leokun  
    OP
       15 小时 53 分钟前
    @jiuhuicinv 这是最容易模拟的
    shuiduoduo
        4
    shuiduoduo  
       15 小时 53 分钟前 via iPhone
    各种无头浏览器
    pingdog
        5
    pingdog  
       15 小时 40 分钟前 via Android
    买 ip 库,检测到 proxy/idc 跑 js PoW ,captcha 验证码,加 fingerprint 差不多了,再搞多就不化算,防的成本多于攻
    fyq
        6
    fyq  
       15 小时 39 分钟前
    用户雇个大学生手动操作也就 3000 一个月
    iOCZS
        7
    iOCZS  
       15 小时 28 分钟前
    不能,只能结合行为做上下文分析
    leokun
        8
    leokun  
    OP
       15 小时 28 分钟前
    想到一个麻烦的办法,也是爬虫模拟与真实操作的本质区别
    在访问网页时,真实的业务访问是连续的,间隔的,同一个用户在特定的业务中是不可能出现并发的,即使用户模拟 js 很厉害,但是在模拟业务次序,调整请求间隔上很难做到与真实用户一样
    wy315700
        9
    wy315700  
       15 小时 25 分钟前
    @leokun #8
    检测请求间隔
    人的请求间隔是不稳定的,无规律的。
    而大部分爬虫往往使用 sleep(random(x,y))的方法模拟间隔,这种均匀分布有很明显的特征
    longzhou6431
        10
    longzhou6431  
       15 小时 25 分钟前
    可以考虑拒绝掉新建连接的第一个请求包,这样可以确保地址不被探活
    Donahue
        11
    Donahue  
       15 小时 22 分钟前
    浏览器 ja3 签名/浏览器指纹之类的
    MYDB
        12
    MYDB  
       15 小时 15 分钟前 via iPhone
    这属于攻防了,对方水平很高,那建议花更多的钱请个高人或者找业内顶尖团队,否则记录日志就能挡住一些新手写的爬虫了
    nekoneko
        13
    nekoneko  
       15 小时 8 分钟前
    无解
    最多是对前端请求做个摘要, 后端接到后进行验证, 这个只能提高门槛
    另外就是加蜜罐, 这样能知道哪些用户是不正常的.
    lambdaq
        14
    lambdaq  
       15 小时 3 分钟前
    用户模拟 js 的水平很高?

    用户直接上无头浏览器!
    triptipstop
        15
    triptipstop  
       15 小时 3 分钟前
    调用 GPU 不给用的 直接怕黑
    voidemoer
        16
    voidemoer  
       14 小时 34 分钟前
    比较有效的方法一是带上各种人机交互验证,二是监控用户鼠标轨迹
    但是对抗情形下,都有破解的方法:第三方解码、多轨迹回放,只不过会大大增加攻击者的成本
    deplives
        17
    deplives  
       14 小时 29 分钟前
    你说的这个无非就是反爬,没有最终的方案,都只是攻防而已
    coefu
        18
    coefu  
       14 小时 28 分钟前
    @leokun #8 这是个蠢办法,你怎么确定,你不会 ban 掉真实的用户?
    yianing
        19
    yianing  
       14 小时 26 分钟前 via Android
    无解,人家用无头浏览器,ai 操作
    miyuki
        20
    miyuki  
       14 小时 26 分钟前
    无非猫捉老鼠,后台搞个无头浏览器
    ejin
        21
    ejin  
       13 小时 54 分钟前
    油猴脚本,请求完全是浏览器发出和渲染,你怎么破,哈哈哈
    laggage
        22
    laggage  
       13 小时 50 分钟前
    hmmm, 不能加验证码吗,请求前 js 弹出验证码框,验证通过才给请求?
    play78
        23
    play78  
       13 小时 48 分钟前
    定时更新前端代码和后端接口及加密请求方式,业务流程。只要你改得足够快,模拟的人就跟不上。
    很简单,你前后端稍微改一下业务流程,逆向的人,要花 10 倍的时间去梳理。只要成本与收益不匹配。就没人去做。
    duanxianze
        24
    duanxianze  
       13 小时 48 分钟前
    不可能的,只能用各种人机验证,验证码来预防
    Rickkkkkkk
        25
    Rickkkkkkk  
       13 小时 46 分钟前
    用户直接手点浏览器你感觉能区分吗?
    Ketteiron
        26
    Ketteiron  
       13 小时 41 分钟前
    @leokun #8 请不要重新发明 cloudflare waf ,免费的
    zachariahss
        27
    zachariahss  
       13 小时 31 分钟前
    单请求没办法,请求前的页面渲染状态,埋点,加载状态,鼠标轨迹,行为逻辑分析,一系列东西去判断,但是防不住真想和你做对抗的人....这东西都是一整个团队用上各种手段去尝试,对抗,没啥一劳永逸的办法
    akakidz
        28
    akakidz  
       13 小时 31 分钟前
    本质上,这类问题没有绝对的防御手段。对抗方式往往是一个“试错博弈”的过程,如果用户的试错成本足够低,那么无论你做多少防护,他总能找到突破口。关键在于如何提高用户的试错成本,而不是通过技术手段杜绝爬虫
    Ketteiron
        29
    Ketteiron  
       13 小时 19 分钟前
    这个问题等价于如何防止爬虫
    答案是防不了

    人机验证
    通过接码平台解决

    五秒挑战,参考 Cloudflare 5 秒盾,浏览器静默执行一段 js 脚本,识别当前是否是正常环境
    通过无头浏览器解决

    浏览器指纹验证
    https://github.com/fingerprintjs/fingerprintjs
    但它是开源的,攻击者依然可以想办法绕过

    tls 指纹识别,cloudflare 等云厂商通过对所有开源请求库做特征库,能识别一个请求是否通过浏览器正常发送,甚至能识别无头浏览器
    但可惜可以无头浏览器+伪造特征

    再来就是老一套的混淆接口加解密
    没啥用,5 分钟以内就能破
    MHPSY
        30
    MHPSY  
       13 小时 5 分钟前
    有一个 brightdata ,可以搜索一下

    他们提供完整的无头浏览器远程的方案,包括自动过验证码,自动过 5 秒盾,几乎只需要写拿数据的业务逻辑就可以了,很方便。

    很难爬的数据我就用这个搞,基本都能搞定
    Ketteiron
        31
    Ketteiron  
       13 小时 3 分钟前
    人机验证算是最有效的防护手段了,双方硬拼钱包,但已经渐渐出现 AI 接码服务,攻击者成本会越来越低。
    dddd1919
        32
    dddd1919  
       12 小时 59 分钟前
    也可以 RPA 操作浏览器,无解
    leokun
        33
    leokun  
    OP
       12 小时 44 分钟前
    @play78 如果加解密的过程是动态生成或编译的,攻击者采用模拟手段应该会更加困难
    lisxour
        34
    lisxour  
       12 小时 40 分钟前
    @Ketteiron 现在的打码平台便宜到你怀疑人生,百万级以下上打码平台都不带眨眼的
    Ketteiron
        35
    Ketteiron  
       12 小时 37 分钟前
    @play78 没用,一般都是用无头去爬
    AutumnVerse
        36
    AutumnVerse  
       12 小时 27 分钟前 via iPhone
    直接上 cf 盾,如果这都被破解,那就认了吧
    bzw875
        37
    bzw875  
       12 小时 4 分钟前
    通通加上人机验证,图片验证码
    lavvrence
        38
    lavvrence  
       11 小时 50 分钟前
    felixsama969
        39
    felixsama969  
       11 小时 1 分钟前
    被针对是无解的
    hahahalololo
        40
    hahahalololo  
       10 小时 49 分钟前
    @Ketteiron 5 分钟!!大佬!!!我碰到 js 混淆加密,经常看半天都找不到破解方法
    kxg3030
        41
    kxg3030  
       10 小时 39 分钟前
    以前还有 tls 指纹的 现在 也是轻松过了 放弃吧
    kxg3030
        42
    kxg3030  
       10 小时 33 分钟前
    @MHPSY 不会是广告吧
    macaodoll
        43
    macaodoll  
       10 小时 18 分钟前
    我就是做爬虫的,无解
    dode
        44
    dode  
       10 小时 17 分钟前
    查看 UA ,操作系统,HTTP 请求头
    dode
        45
    dode  
       10 小时 16 分钟前
    统统随机人机验证验证码
    DimensionalBoy
        47
    DimensionalBoy  
       10 小时 3 分钟前
    你防住我的同时也会防住某些客户,然后客户:你的产品真难用
    hnliuzesen
        48
    hnliuzesen  
       9 小时 55 分钟前
    TLS 握手指纹,不过可以模拟
    iorilu
        49
    iorilu  
       9 小时 50 分钟前
    为什么要模拟 js

    现在都是直接程序控制浏览器阿, 确实都是浏览器的访问
    unused
        50
    unused  
       9 小时 37 分钟前
    浏览器是啥
    whp1473
        51
    whp1473  
       8 小时 59 分钟前
    这个不能完全实现,但如果你希望是从自己的产品网页发出则是可以实现的,可以通过 js 代码记录全面的用户行为记录,然后发送行为记录数据,比如鼠标的移动、颤动、停顿、页面的切换等等,模拟成本无限拔高。
    Kinnice
        52
    Kinnice  
       8 小时 51 分钟前 via Android
    埋暗点,比如某几个.js/jpg 返回是 js/jpg 内容,但是实际是后端用来检测是不是爬虫的一个暗点

    需要配合:别直接 ban 对方指纹,而是随机延迟返回,接口随机 50x 报错,假数据

    只针对那种纯发包的爬虫场景,模拟浏览器的还要结合浏览器指纹/ip/一些 hack api ,随机的高级别验证码等
    KagurazakaNyaa
        53
    KagurazakaNyaa  
       7 小时 53 分钟前
    https://github.com/TecharoHQ/anubis 上阿努比斯,每个请求都要计算,正常用户在一个设备上不会有很高频率的请求,爬虫才会
    liudewa
        54
    liudewa  
       7 小时 33 分钟前
    @Ketteiron #29 随便一个网站 你 50 分钟也不一定能搞定
    Ketteiron
        55
    Ketteiron  
       7 小时 30 分钟前
    @liudewa #54 网站发来
    cheng6563
        56
    cheng6563  
       2 小时 12 分钟前
    要求客户客户端挖个矿
    linxiaojialin
        57
    linxiaojialin  
       1 小时 15 分钟前
    @Ketteiron 你好,请教一下,假如需要长时间(例如 24 小时不间断地)爬取一个电商的页面,而它有 CF 盾,同时要和其他人抢购不定时刷新出来的秒杀商品,请问有办法确保不会被屏蔽并尽量抢购到商品吗?
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   918 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:24 · PVG 04:24 · LAX 13:24 · JFK 16:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.