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

2024-07-11 15:41:29 +08:00
 qazwsxkevin
买了个服务,提供方用 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 次返回完成,中间人能看到的可能性有多大?
4062 次点击
所在节点    程序员
27 条回复
yikuo
2024-07-11 18:28:51 +08:00
HTTPS 是加密的,如果没有遭遇中间人攻击,最多只能看到访问的域名,看不到 URL ,也与客户端无关。
jim9606
2024-07-11 18:56:05 +08:00
TLS 会将所有 HTTP 消息加密,只有域名 service.website.net 会暴露,这完全是因为 TLS 主流应用需要通过 SNI 扩展明文告知域名以供服务器选择证书。
如果客户端有一些状态缓存,在只有被动监听攻击的情况下可以连域名都不暴露。
forvvvv123
2024-07-11 21:30:47 +08:00
看不到;

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

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

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

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

还是那句话,也不是不能用
dode
2024-07-12 09:08:55 +08:00
提供 get 兼容纯粹是为了不懂的人设计的简化吧,你可以用 post
misaka19000
2024-07-12 09:10:02 +08:00
HTTPS 除了域名之外什么都看不到
salmon5
2024-07-12 09:49:25 +08:00
@forvvvv123 #3 还有一种风险,而且这个风险更大:
搜索引擎比如 bing 等,会把自家的浏览器( edge )用户的访问记录,给自家的爬虫爬,然后全球的人都可能搜索到。
salmon5
2024-07-12 09:52:49 +08:00
然后
https://example.com/login?user_name=abc&password=xyz
就会出现在 bing 的搜索结果中,这块 google 就处理的很专业,收录的时候会把 args 去掉。
salmon5
2024-07-12 09:56:08 +08:00
@salmon5 #16 这里说一嘴,edge 浏览器存在很大的隐私安全问题。
feiyan35488
2024-07-12 16:15:05 +08:00
@yuzo555 有根证书后,还需要配合中间人劫持流量才行,类似使用 charles 抓包, 一般只会存在个别场合里或 gfw 封控的域名下
julyclyde
2024-07-14 14:03:02 +08:00
@forvvvv123 如果你真的读过 HTTP 标准,就不会觉得这种情况 GET 和 POST 有什么区别
HTTP 请求的时候,用户名密码并不在 URL 里而是在 header 里

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1056586

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX