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

https 的 url 带有账号、密码、动作等等参数内容,在本地看起来, 1 次请求就完成的过程,中间的流量观察者,能不能直接看到这些内容?

  •  
  •   qazwsxkevin · 2024-07-11 15:41:29 +08:00 · 3979 次点击
    这是一个创建于 368 天前的主题,其中的信息可能已经有所发展或是发生改变。
    买了个服务,提供方用 url 的 get or post 方式完成服务提供,类似这样: https://service.website.net/ser?xx&yy&zz 的,
    https 的概念不熟悉,请问:

    1 、https 是 client 在和 web 服务器做完域名 ca 核证、建立 TLS 通道后,才开始握手处理域名后面的内容吗?
    2 、这个跟本地客户端的发起者是什么,会过程不同吗?
    比如说发起者是 curl 、firefox 浏览器,c++的 sdk http:api 接口?
    遵从 https 规范一致性?

    3 、那么,bash shell 代码里直接组装成完整 https 的 url 去请求,1 次请求,1 次返回完成,中间人能看到的可能性有多大?
    27 条回复    2024-07-14 20:56:06 +08:00
    yikuo
        1
    yikuo  
       2024-07-11 18:28:51 +08:00 via Android
    HTTPS 是加密的,如果没有遭遇中间人攻击,最多只能看到访问的域名,看不到 URL ,也与客户端无关。
    jim9606
        2
    jim9606  
       2024-07-11 18:56:05 +08:00 via Android
    TLS 会将所有 HTTP 消息加密,只有域名 service.website.net 会暴露,这完全是因为 TLS 主流应用需要通过 SNI 扩展明文告知域名以供服务器选择证书。
    如果客户端有一些状态缓存,在只有被动监听攻击的情况下可以连域名都不暴露。
    forvvvv123
        3
    forvvvv123  
       2024-07-11 21:30:47 +08:00   ❤️ 3
    看不到;

    如果考虑保密性,从实践来说,放到 Body 里面( POST 方式)比 URL 里面( GET 方式)会更好,因为除了 tls 保障通信过程中的安全,URL 相比请求 Body 在各个节点更容易被记录和存储(比如默认的 nginx 日志),从而更容易因为其他因素被泄露;
    blackeeper
        4
    blackeeper  
       2024-07-11 21:33:43 +08:00
    问题 1 ,是的,建立 TLS 加密通道后,才开始交换内容信息
    问题 2 ,不会,过程是一样的
    问题 3 ,中间人看到的可能性为 0 。除非你的证书秘钥泄露给别人,且这个别人是 [中间人] ,能管控你网络的人
    lzy250
        5
    lzy250  
       2024-07-11 21:48:48 +08:00 via iPhone
    DPI 也能解析到。
    0o0O0o0O0o
        6
    0o0O0o0O0o  
       2024-07-11 23:28:34 +08:00
    1. 是
    2. 可能会有区别,但不会破坏 1 ,例如 RFC 8470
    3. 前提一定是客户端是安全的,服务器是安全的,证书是安全的。那么考虑的只是会不会被例如 POODLE attack 影响,那只要工具实现是安全的,服务端正确配置了,就不需要担心。
    yuzo555
        7
    yuzo555  
       2024-07-11 23:58:47 +08:00
    我有一个疑问,Win 下一个程序获取管理员权限后,添加的根证书,可以用来劫持监听浏览器的 HTTPS 流量吗?
    我看那些网游加速器随随便便就会添加一个根证书到系统里面。
    fkdtz
        8
    fkdtz  
       2024-07-12 00:21:35 +08:00
    @yuzo555 仅仅添加了根证书是不会解析到 HTTPS 数据的,想要解析出 HTTPS 数据还需要有劫持网路流量这一步,让所有请求都走代理,这就形成了典型的中间人。
    0o0O0o0O0o
        9
    0o0O0o0O0o  
       2024-07-12 00:35:15 +08:00
    @yuzo555 #7 “获取管理员权限”后,你可以认为它能做任何坏事。此外这个问题其实讨论过, 本来就是为了 MITM 。

    /t/879778
    /t/1036217
    fpk5
        10
    fpk5  
       2024-07-12 01:23:21 +08:00
    @yuzo555 #7 添加根证书+加速器代理流量=对于加速器都是明文的
    R4rvZ6agNVWr56V0
        11
    R4rvZ6agNVWr56V0  
       2024-07-12 03:34:56 +08:00
    虽然理论上存在一些高级的攻击方法可能会威胁到 HTTPS 的安全性,但对于一般的流量观察者来说,由于 HTTPS 的加密特性,他们无法直接看到 URL 中的账号、密码或其他敏感信息,只能看到域名。

    如果遇到中间人攻击,那么都透明了,无所谓敏感信息放在 URL or Body 。
    Trim21
        12
    Trim21  
       2024-07-12 04:08:56 +08:00 via Android
    在证书安全,加密算法没漏洞的情况下,中间人看不到 url 域名以外的东西。
    elboble
        13
    elboble  
       2024-07-12 08:51:01 +08:00
    get 不好看,就用 post 呗,至少 url 上看不到。

    不过参数在 https 下都看不到的,

    还是那句话,也不是不能用
    dode
        14
    dode  
       2024-07-12 09:08:55 +08:00
    提供 get 兼容纯粹是为了不懂的人设计的简化吧,你可以用 post
    misaka19000
        15
    misaka19000  
       2024-07-12 09:10:02 +08:00
    HTTPS 除了域名之外什么都看不到
    salmon5
        16
    salmon5  
       2024-07-12 09:49:25 +08:00
    @forvvvv123 #3 还有一种风险,而且这个风险更大:
    搜索引擎比如 bing 等,会把自家的浏览器( edge )用户的访问记录,给自家的爬虫爬,然后全球的人都可能搜索到。
    salmon5
        17
    salmon5  
       2024-07-12 09:52:49 +08:00
    然后
    https://example.com/login?user_name=abc&password=xyz
    就会出现在 bing 的搜索结果中,这块 google 就处理的很专业,收录的时候会把 args 去掉。
    salmon5
        18
    salmon5  
       2024-07-12 09:56:08 +08:00
    @salmon5 #16 这里说一嘴,edge 浏览器存在很大的隐私安全问题。
    feiyan35488
        19
    feiyan35488  
       2024-07-12 16:15:05 +08:00
    @yuzo555 有根证书后,还需要配合中间人劫持流量才行,类似使用 charles 抓包, 一般只会存在个别场合里或 gfw 封控的域名下
    julyclyde
        20
    julyclyde  
       2024-07-14 14:03:02 +08:00
    @forvvvv123 如果你真的读过 HTTP 标准,就不会觉得这种情况 GET 和 POST 有什么区别
    HTTP 请求的时候,用户名密码并不在 URL 里而是在 header 里
    forvvvv123
        21
    forvvvv123  
       2024-07-14 20:08:48 +08:00
    @julyclyde 所以不推荐放 get 里面啊
    julyclyde
        22
    julyclyde  
       2024-07-14 20:43:44 +08:00
    @forvvvv123 啊?你的思路是怎样的?
    都说了不在 URL 里了!
    为什么就“所以”了?
    forvvvv123
        23
    forvvvv123  
       2024-07-14 20:46:46 +08:00
    @julyclyde 无非就是放到 urlpath 、get 参数、post 参数、header 这几个地方嘛,放 header 、post 参数会比放 urlpath 、get 参数好,因为 url 和 get 参数更容易被各个地方记录。 不是这个意思吗?
    julyclyde
        24
    julyclyde  
       2024-07-14 20:53:16 +08:00
    @forvvvv123 对啊,但现实是没在你认为容易记录的位置上啊
    forvvvv123
        25
    forvvvv123  
       2024-07-14 20:54:28 +08:00
    @julyclyde 你的意思是现实中的实现其实都是在 header 和 post 上?
    julyclyde
        26
    julyclyde  
       2024-07-14 20:55:17 +08:00
    @forvvvv123 我上面都说过了啊“如果你真的读过标准”
    forvvvv123
        27
    forvvvv123  
       2024-07-14 20:56:06 +08:00
    @julyclyde 哦哦哦哦哦,是这个意思
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1057 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:52 · PVG 02:52 · LAX 11:52 · JFK 14:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.