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

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

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

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

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

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

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

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

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

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

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

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

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

    只针对那种纯发包的爬虫场景,模拟浏览器的还要结合浏览器指纹/ip/一些 hack api ,随机的高级别验证码等
    KagurazakaNyaa
        53
    KagurazakaNyaa  
       2 小时 24 分钟前
    https://github.com/TecharoHQ/anubis 上阿努比斯,每个请求都要计算,正常用户在一个设备上不会有很高频率的请求,爬虫才会
    liudewa
        54
    liudewa  
       2 小时 4 分钟前
    @Ketteiron #29 随便一个网站 你 50 分钟也不一定能搞定
    Ketteiron
        55
    Ketteiron  
       2 小时 1 分钟前
    @liudewa #54 网站发来
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2709 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:54 · PVG 22:54 · LAX 07:54 · JFK 10:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.