V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
freshgoose
V2EX  ›  问与答

cloudflare 是怎么知道我用 requests 的?

  •  
  •   freshgoose · 2020-01-30 20:25:42 +08:00 · 5582 次点击
    这是一个创建于 1763 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    那个网址是:aHR0cHM6Ly93d3cuYXJ0c3RhdGlvbi5jb20vYXJ0d29yay84bEQ0blE=

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

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

    这个网站用了 Cloudflare Bot Management

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

    https://sm.ms/image/xlyEC82cPtqz51L

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

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

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