freshgoose
V2EX  ›  问与答

cloudflare 是怎么知道我用 requests 的?

  •  
  •   freshgoose · Jan 30, 2020 · 6594 views
    This topic created in 2296 days ago, the information mentioned may be changed or developed.

    我通过代理访问一个网站,在流览器访问(隐身模式+禁止 JS )没问题,可以拿到 html,用 requests.get 就 403 了,显示了 cf 的页面,提示我要滑验证码。

    但是我明明把 headers 都凑齐了(通过 Network 把 requests header 一个个复制出来的),跟浏览器用的一个代理,怎么偏偏 requests.get 就 403 了呢?

    那个网址是:aHR0cHM6Ly93d3cuYXJ0c3RhdGlvbi5jb20vYXJ0d29yay84bEQ0blE=

    大家有空可以研究一下,我实在搞不懂。

    27 replies    2024-08-30 14:41:09 +08:00
    shylockhg
        1
    shylockhg  
       Jan 30, 2020
    不太懂,代理做的是转发吧,http 头有字段会声明客户端( request )
    wangxiaoaer
        2
    wangxiaoaer  
       Jan 30, 2020 via Android
    cookie 呢?抓包对比呗。
    ZeroClover
        3
    ZeroClover  
       Jan 30, 2020   ❤️ 1
    https://sm.ms/image/MVqWXUfg52E18CJ

    这个网站用了 Cloudflare Bot Management

    用 cURL 之类的访问,即使模拟了各种 Header 和 UA,在 CF 后台也仍然可以看到 knownBotClientHelloExtensions 这种标识
    freshgoose
        4
    freshgoose  
    OP
       Jan 30, 2020
    @shylockhg #1 感谢回复,应该是没有声明客户端的,这是我同一环境下请求 httpbin 的结果: https://pastebin.com/b27uaKvW
    freshgoose
        5
    freshgoose  
    OP
       Jan 30, 2020
    @ZeroClover #3 感谢回复,那为什么我用:同样的 IP + 浏览器隐身模式 + 禁止 JS 又能访问呢,按理来说这样子一搞,跟直接用 requests.get 也没啥区别了吧
    chinvo
        6
    chinvo  
       Jan 30, 2020 via iPhone
    @freshgoose #5 cookie
    ZeroClover
        7
    ZeroClover  
       Jan 30, 2020
    @freshgoose 我只是客户,不是 CF 的人,他们也不会详细告诉我怎么实现的。

    https://sm.ms/image/xlyEC82cPtqz51L

    就他们的说法,Bot Management 会通过 JS 来识别 Bot,如果禁止 JS 只是识别率下降,但是那是针对无头浏览器,一般的什么 requests 还是识别率很高
    chinvo
        8
    chinvo  
       Jan 30, 2020 via iPhone
    @freshgoose #5 还有后续请求

    curl 不会在加载页面之后继续加载引入的资源

    总之,很多行为上的差异
    lance6716
        9
    lance6716  
       Jan 30, 2020
    很多方式,比如让你 5 秒内暴力算一个 js 程序,能算出来的才是有计算资源的浏览器
    yinanc
        10
    yinanc  
       Jan 30, 2020 via iPhone
    @lance6716 啥浏览器这么智能?还能服务器让你做啥就做啥?
    WordTian
        11
    WordTian  
       Jan 31, 2020 via Android
    ua?我记得 requests 的 ua 会带一些
    WordTian
        12
    WordTian  
       Jan 31, 2020 via Android
    ua?我记得 requests 的 ua 会带 requests 的信息,没
    WordTian
        13
    WordTian  
       Jan 31, 2020 via Android
    @WordTian 没打完发出去了,两次。。。
    vibbow
        14
    vibbow  
       Jan 31, 2020
    你看一下 https 握手时使用的协议
    Yourshell
        15
    Yourshell  
       Jan 31, 2020
    跟反爬虫一个道理吧
    msg7086
        16
    msg7086  
       Jan 31, 2020   ❤️ 2
    @yinanc 每个浏览器。
    uiuy
        17
    uiuy  
       Jan 31, 2020 via Android
    有点意思,我明天看看
    love
        18
    love  
       Jan 31, 2020 via Android
    你就那么确定真和浏览器发出的一样?不抓包看看?还要比较浏览器头的顺序和大小写。有些语言的 dict 结构没有顺序。
    wd
        19
    wd  
       Jan 31, 2020 via iPhone
    他们可以这么做,不是通过者一个请求来判断你是不是合法。比如浏览器访问这个 url 前还访问了其他 url,你直接 request 没有这个逻辑
    alan0liang
        20
    alan0liang  
       Jan 31, 2020 via Android
    看 #3 说的 knownBotClientHelloExtensions,应该是 TLS 握手的时候 Extensions 顺序什么的不太一样
    binux
        21
    binux  
       Jan 31, 2020 via Android
    SSL fingerprint
    Chaidu
        22
    Chaidu  
       Jan 31, 2020 via iPhone
    太多方式可以识别了。比如,你通过浏览器访问网页,服务器能获取你系统安装了哪些字体(这一条就超过很多人的认知范围了吧?)
    Birdy0017
        23
    Birdy0017  
       May 2, 2020
    我想爬 artstation 的图,也遇到 CloudFlare 了,但只有图片页的网址会被 403 gank 。也是试过添加所有的 header 没用。
    //正常
    https://www.artstation.com/tokosuzuki
    //被 gank
    https://www.artstation.com/artwork/L2Adbl
    Birdy0017
        24
    Birdy0017  
       May 2, 2020
    freshgoose
        25
    freshgoose  
    OP
       May 2, 2020
    @Birdy0017 #24 后来我知道了,其实是你的客户端 tls 版本的问题,他强制使用 tls1.3 (貌似是这个)版本,低版本的全都被拒绝。
    hahaxo
        26
    hahaxo  
       Aug 30, 2024
    https://sxyz.blog/bypass-cloudflare-shield/
    关键字:TLS 指纹、HTTP/2 指纹、Cipher Suites
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4293 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 05:19 · PVG 13:19 · LAX 22:19 · JFK 01:19
    ♥ Do have faith in what you're doing.