cloudflare 是怎么知道我用 requests 的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
freshgoose
V2EX    问与答

cloudflare 是怎么知道我用 requests 的?

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

    我通过代理访问一个网站,在流览器访问(隐身模式+禁止 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 每个浏览器。
    uiuy
        17
    uiuy  
       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  
       2024-08-30 14:38:37 +08:00
    https://sxyz.blog/bypass-cloudflare-shield/
    关键字:TLS 指纹、HTTP/2 指纹、Cipher Suites
    hahaxo
        27
    hahaxo  
       2024-08-30 14:41:09 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2730 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 09:17 PVG 17:17 LAX 02:17 JFK 05:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86