V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
shadow1949
V2EX  ›  程序员

为啥用 F12 看不到很多公司的接口请求和响应的?请问下大家这种具体是怎么做到的?

  •  
  •   shadow1949 · 2024-02-26 15:49:53 +08:00 · 5173 次点击
    这是一个创建于 366 天前的主题,其中的信息可能已经有所发展或是发生改变。

    对网络传输和安全这一块不太了解,最近公司让我们对接口出入参做个加解密,我便想去其他平台看看他们怎么做的,发现很多页面实际上都无法抓到实际的 XHR 接口,要么返回的是整个页面,要么直接在网络里面啥都找不到……

    请问下大家这种具体是怎么做到的?是直接存在 CDN 之类的里面吗(可应该不会所有页面都在 CDN 吧)?

    另外有必要对接口出入参做加解密吗?搜了一些文章,有些人说可以用 RSA 和 ASE 做加密,有些人又说出入参加解密根本没必要,因为 HTTPS 本身够安全,即使加密,前端代码也是公开的,能够直接破解。

    33 条回复    2024-02-27 13:46:29 +08:00
    rqxiao
        1
    rqxiao  
       2024-02-26 15:50:58 +08:00   ❤️ 1
    前端有代理服务器
    Moyyyyyyyyyyye
        2
    Moyyyyyyyyyyye  
       2024-02-26 15:52:09 +08:00   ❤️ 1
    服务器渲染做的
    flyqie
        3
    flyqie  
       2024-02-26 15:52:18 +08:00 via Android   ❤️ 1
    给个地址?

    真实请求无法隐藏。
    dapang1221
        4
    dapang1221  
       2024-02-26 15:52:31 +08:00   ❤️ 1
    websocket
    quic
    或者压根就是上古 MVC 架构服务器直接渲染出来的 - -
    NelsonZhao
        5
    NelsonZhao  
       2024-02-26 15:52:59 +08:00   ❤️ 1
    统一这个观点:因为 HTTPS 本身够安全,即使加密,前端代码也是公开的,能够直接破解。
    建议问一下领导出入参加密的原因是啥。
    flyqie
        6
    flyqie  
       2024-02-26 15:56:11 +08:00 via Android   ❤️ 1
    @NelsonZhao #5

    网易云游戏加密了。。

    好奇为啥要加密。
    Puteulanus
        7
    Puteulanus  
       2024-02-26 15:56:15 +08:00   ❤️ 1
    你是不是遇上 SSR 的了,server side rendering
    接口感觉一般是做签名,签名的函数再给混淆一下,防止用户模拟和重放
    clue
        8
    clue  
       2024-02-26 15:57:04 +08:00   ❤️ 3
    服务端渲染直出, websocket

    websocket 想要抓包, 得在一开始就打开 dev 面板, 在建立连接时抓到

    另外对外开放的 API 一般不做加密(HTTPS 本身就够了)只做签名, 用于防重放/篡改, Timestamp+Nonce+Signature
    corcre
        9
    corcre  
       2024-02-26 15:57:30 +08:00   ❤️ 1
    MVC 可以做到, 也有可能是更远古的 PHP 混编整出来的🐶
    flyingghost
        10
    flyingghost  
       2024-02-26 16:03:10 +08:00   ❤️ 1
    https 只保护传输不被监听、窃取、篡改。
    也就是客户端和服务器之间不会蹲有一个未知的“中间人”。
    但客户端本身就是一个攻击面。如果客户端不安全,相当于一个逆向工程师蹲在浏览器里,所有输入、输出、渲染过程、前端交互逻辑、渲染数据都失密。
    好在以上大部分都不怎么值钱,值钱的都服务端计算/渲染了。
    唯一值钱的是当前账号个人数据,系统风险可控,法律风险更好甩,反倒是防护成本巨高效果不好,就这样吧。
    sniperhgy
        11
    sniperhgy  
       2024-02-26 16:05:51 +08:00   ❤️ 1
    现在有一些网站,也会专门针对“开发者模式”进行阻挠,之前想在一个外国的 online game 网站上用 F12 找到真正的游戏 rom 地址,结果直接就告诉我侦测到开发者模式,不能进行后续操作😂
    zorro2020
        12
    zorro2020  
       2024-02-26 16:09:19 +08:00
    还遇到一些 APP 正常可以访问,手机一连代理,APP 就网络异常,什么请求都看不到了
    dyllen
        13
    dyllen  
       2024-02-26 16:09:47 +08:00   ❤️ 1
    曾经面试遇到面试官说 post 比 get 更安全,因为 get 参数放到 url 里面可以在地址栏直接复制。。。
    dyllen
        14
    dyllen  
       2024-02-26 16:10:41 +08:00
    @zorro2020 这种应该是做了双向证书验证吧?
    SoyaDokio
        15
    SoyaDokio  
       2024-02-26 16:10:55 +08:00
    “开发者工具” 的 “网络监控” 里开启监控功能后看不到请求记录??
    这个也行?有啥意义呢,抓包也都可以拿到阿?
    应该是我理解错了吧
    shadow1949
        16
    shadow1949  
    OP
       2024-02-26 16:11:02 +08:00
    @Puteulanus
    应该是 SSR ,之前只尝试打开一些网页,看不到正常出入参的接口感觉很奇怪。

    现在重新去试了一些新增更新操作,发现 GET 请求基本都是返回页面,然后 POST 请求能够正常看到入参和出参的。
    me1onsoda
        17
    me1onsoda  
       2024-02-26 16:11:17 +08:00
    @NelsonZhao 增加破解成本,提高破解门槛
    blackcellcode
        18
    blackcellcode  
       2024-02-26 16:26:55 +08:00
    SSR
    error451
        19
    error451  
       2024-02-26 16:28:30 +08:00
    https 可以防止中间人获取请求数据内容来进行中间人攻击。

    对参数进行加密,目的是为了防止参数篡改重放, 就是攻击者修改原来的参数再次请求。

    这两个安全措施的目的并不一样啊。

    如果 API 加了安全令牌,时间戳等防重放的安全措施,则就没必要再对参数整体加密了。
    cxe2v
        20
    cxe2v  
       2024-02-26 16:32:12 +08:00
    @dyllen #13 是的,至少 post 要打开 F12 控制台,比地址栏复制多两步
    lm930129
        21
    lm930129  
       2024-02-26 17:16:50 +08:00
    参数加密确实没啥用,因为你肯定有个前端解密的过程,你前端代码是没法加密的。比如,某政府网站,接口通过物理 key 进行加解密,传出和传入参数都是密文,但是意义不大的,你在控制台,直接调用前端加密和解密函数,就可以得到明文的。
    datoujiejie221
        22
    datoujiejie221  
       2024-02-26 17:19:11 +08:00
    现在单一的加解密已经很难防止破解了,看了 https 协议,你会发现最复杂的不是加解密,而是双方随机数的生成,就像 gpt 和文心一言网页版,虽然请求可以抓到明文,但是随机 token 的生成几乎不能破解。
    F7TsdQL45E0jmoiG
        23
    F7TsdQL45E0jmoiG  
       2024-02-26 17:24:20 +08:00
    前后端分离天生就不安全
    ljsh093
        24
    ljsh093  
       2024-02-26 17:36:04 +08:00
    ws 传输的吧
    Light3
        25
    Light3  
       2024-02-26 17:41:33 +08:00
    十年前的模版渲染?
    lyc8503
        26
    lyc8503  
       2024-02-26 17:50:30 +08:00
    可能性:
    1. 使用了模板渲染
    2. Websocket
    3. Server-side rendering

    解决方法:
    1 直接用 bs4 解析 html 拿数据
    2 直接看 Websocket
    3 可以直接读取 __NEXT_DATA__

    如果要接口加密,自己 JS 写个签名算法,混淆 JS 能提升逆向难度,但也是治标不治本,有经验的人来很快就能分析出来

    正确方法是后端进行风控,比如限制手机号登录,限制 IP 等
    sampeng
        27
    sampeng  
       2024-02-26 17:57:39 +08:00
    https 没必要把接口做加密。直接做签名就好了。签名包含时间。后端就能做风控了
    xiangyuecn
        28
    xiangyuecn  
       2024-02-26 19:12:44 +08:00
    万物皆可破解,就看值不值
    Nosub
        29
    Nosub  
       2024-02-26 19:22:28 +08:00 via Android
    首先要说的是安全只是相对的,后端渲染和 socket 本身也有自己的局限性,数据全部加密不是不行,成本太高,前后端都要加解密,@sampeng 这个哥们说的基本是对的,如果网站本身已经是 https 了,做 api 的接口签名校验就可以了,敏感的数据还是要加密的,比如注册,登陆时候的账号密码,刚好我最近写了一篇文章,感兴趣的可以看看,https://nosub.net/posts/p/72
    kahlkn
        30
    kahlkn  
       2024-02-26 20:46:28 +08:00
    前端加密只能防止一些门外汉(不过像登录账号密码等,可以考虑加个密)。 专心搞破解的,前端加密没啥用。

    你说的那种抓不到 xhr ,大概率两种,一种就是服务端 渲染成 Html 直接到浏览器(比如 nodejs 服务端 和 古早的模板引擎)。 还有一种就是它走的是 JS ,再 某个 JS 文件中包含了数据,然后渲染到前端界面。
    gitlight
        31
    gitlight  
       2024-02-26 20:49:42 +08:00
    可能做 SSR 了
    rockyliang
        32
    rockyliang  
       2024-02-27 10:20:53 +08:00
    @Nosub #29 ,文章里的 HTTPS 加解密流程图已经过时了,现在的 HTTPS 基本上都是使用 ECDHE 密钥交换协议,服务器的公钥每次都是随机生成的,并不会使用证书里的公钥来加密 AES 密钥
    Promtheus
        33
    Promtheus  
       2024-02-27 13:46:29 +08:00   ❤️ 1
    很有可能是因为他请求的后台接口应用不是你前段看到的这个应用,是一个独立的应用。这样你就 f12 看不到了。抓包才可以看到
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1235 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:48 · PVG 01:48 · LAX 09:48 · JFK 12:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.