代理能够重发消息吗?

2020-12-04 21:39:16 +08:00
 jimmyismagic

假如你连了一个恶意的代理,连上一个 https 服务,一般代理是看不到你发送的内容的

但是,代理能不能劫持你的加密内容,重复发送给对应服务,我感觉不太可能,因为 http 是无状态的,链接建立处理完消息就断了,一般不能在一个链接内处理两个 POST 请求,我这个看法不知道对不对?

但如果我连的是一个 websocket(wss)服务,使用了中间代理,这个代理能不能劫持我的消息多次重发?

假设链接的服务是买卖股票,那有没有可能在买股票的时候被代理恶意重发而重复购买?

2249 次点击
所在节点    程序员
19 条回复
superrichman
2020-12-04 21:49:07 +08:00
代理看不到明文但可以抓包重放。
服务端没事防重放处理就有可能会重复购买。
不要用无法信任的代理服务。
lujjjh
2020-12-04 22:21:20 +08:00
你也太小看 TLS 协议了。

「因为 http 是无状态的,链接建立处理完消息就断了,一般不能在一个链接内处理两个 POST 请求」也是错误的。
neteroster
2020-12-04 22:24:23 +08:00
关键词: https replay attack
des
2020-12-04 22:50:24 +08:00
不仅不能重放,而且还能向前保密,确保私钥泄漏也不能解密
http://wmaintw.github.io/2015/03/07/perfect-forward-secrecy.html
iceheart
2020-12-04 23:04:18 +08:00
理论上是可能的,-----比如说大整数质因数分解被攻破,或者 AES 对称加密被破解。
carlclone
2020-12-04 23:26:25 +08:00
@des 这么恐怖吗,真没想过还能录制下来等以后解密的神操作
ZRS
2020-12-04 23:46:40 +08:00
TLS 是防重放的
baobao1270
2020-12-04 23:52:16 +08:00
HTTPS 可以防止重放攻击,HTTP 若服务端无防御措施无法防御
xcstream
2020-12-05 02:45:41 +08:00
应该不能
deorth
2020-12-05 09:54:22 +08:00
甚至不需要代理,只要路由转发链路上的某一台机器部署了相应服务就可以实现重放。
要是和钱相关的服务连防重放都做不到可以赶紧倒闭了
jimmyismagic
2020-12-05 10:36:54 +08:00
@superrichman https 服务端真的需要防止吗?
@lujjjh 举个例子?
@neteroster 多谢,有没有权威的论述?
@des 所以你们到底谁正确?
@iceheart 嗯,被破解当然可以,假如加密无法破解的情况下,用 https 可以防止重放吗?
@ZRS 所以你们到底谁对?说说原因
@baobao1270 我感觉也是,websocket(wss)呢?
@xcstream websocket(wss)呢?
@deorth 不止和钱相关,各种操作都有对个人的数据造成风险,不可能每次写个接口都要考虑是否要防止重放吧
baobao1270
2020-12-05 10:55:36 +08:00
@jimmyismagic Websocket 好像无法防止,WSS 可以。或者说任何使用 TLS 的应用都能防止重放

但是,在设计程序时,会在 HTTP 应用层再做一次防重放。不过 Websocket 做防止重放的比较少,一般来说 WS 不涉及重要操作,比如聊天,重复一句也是可以的。
jimmyismagic
2020-12-05 11:12:40 +08:00
@des 看了你的文章,才知道密钥协商还有这个功能,怪不得我看到很多私有服务都采用 DH 算法,原先以为一个随机密钥就可以了,现在相当于该次连接中在内存中保留了随机私钥没有传输。那么 https 默认是否使用了 DH 这个方式呢?还是哪里需要配置,或者需要在双方应用层协商?
jimmyismagic
2020-12-05 11:14:28 +08:00
@baobao1270 wss 感觉应该也无法防止啊,因为你的链接没有断开,服务端直接收消息处理就行了
superrichman
2020-12-05 12:24:33 +08:00
tls1.3 0-RTT replay
译文 (可重复性 章节)
https://www.oschina.net/translate/rfc-8446-aka-tls-1-3?lang=chs&p=3
原文 (Replayability 章节)
https://blog.cloudflare.com/rfc-8446-aka-tls-1-3/

还是要在应用里做防重放.
jimmyismagic
2020-12-05 13:05:39 +08:00
@des
@superrichman
你们两个各有道理,所以到底能不能重放?
des
2020-12-05 18:14:18 +08:00
@jimmyismagic
我认为你都没有好好看,能不能要看服务端和客户端的具体配置
如果你非要一个结果,那就是可以
des
2020-12-05 18:23:00 +08:00
@des
在没有指定场景的情况下,我可以假定客户端服务端能接受不安全的加密。
甚至可以假定客户端能接受任何不安全的证书,这种情况都可以中间人攻击
jimmyismagic
2020-12-05 18:28:25 +08:00
@des 当然不考虑中间人攻击和客户端安全证书的问题,就是在正常的情况下,你说了一个是保留历史,等未来拿到私钥或者算法破解了,还有一个是用 DH 算法,可以做到完全向前保密,那么在正常的一个 https 链接下,能不能发两次 POST,http 中的 keep-alive 能不能做到呢?

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

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

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

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

© 2021 V2EX