使用 https 后,还有必要用 md5(secret+参数+时间戳)类似这样的方法做数据完整校验吗?

2018-07-09 22:44:23 +08:00
 dawniii

前几天和一个群友争论这个来着,我觉得没有必要再这么做了。https 已经在传输层保证了请求不被篡改和完整性。两者都用的话,算是增加一些别人调用你接口的门槛?但是感觉门槛并不高,在客户端都能找到。

看知乎上有类似话题 https://www.zhihu.com/question/52392988

但是觉得答案都不是太满意。回答说是请求过了负载均衡后,在内网是明文传输,所以不安全?

因此想来看看各位 v 友是怎么看待这个事情。

10259 次点击
所在节点    程序员
32 条回复
zjp
2018-07-09 22:53:32 +08:00
https 防止不了伪造和重放,这两点理由都足够了
FanWall
2018-07-09 22:58:58 +08:00
有必要,例如
1、防重放
2、还有纠正一点,加密的代码就算都在客户端不等于门槛就不高,很多这些大厂的客户端加固混淆强度也是不弱的,至少不是说一个初级的黑客抓一下包就知道原始数据了。自然是不存在绝对安全,但可以为黑客制造一些难度啊
dawniii
2018-07-10 00:32:35 +08:00
@zjp @FanWall 多谢两位的回答。有点疑惑的是,你们说的重放是指中间监听密文重放吗?我记得 ssl 的密文是有序号的,不知道能不能防止这种重放。可能我理解的有偏差。
yumumu
2018-07-10 00:36:04 +08:00
@zjp 如果有证书校验的话是可以做到防止伪造的
zjp
2018-07-10 00:46:15 +08:00
@yumumu 安卓端没看到几个软件校验证书的,随便抓包…我也很奇怪为什么不校验
zjp
2018-07-10 00:51:51 +08:00
@zjp 好像搞错了什么…我想说的伪造和重放都是 Http 层的啊,和证书、SSL 都没有关系
just1
2018-07-10 00:53:21 +08:00
都进内网了啥事干不成?
FanWall
2018-07-10 00:54:41 +08:00
@yumumu #4
@zjp #5
证书校验的应用很多,只能说可以防止简单的中间人,但一样可以伪造,只能说增加难度,不能说完全防止。

@dawniii #3
这里的重放我不是指 TCP 层面的重放,而是 HTTP 协议层面的重放,其实可以和伪造放一起看待,我是这么理解的,专业的见解等楼下。
seeker
2018-07-10 00:55:31 +08:00
@dawniii TLS 握手的时候攻击,可以重放。http://blog.valverde.me/2015/12/07/bad-life-advice/
crab
2018-07-10 00:56:46 +08:00
@dawniii

防止重放 一般 md5(secret+参数+时间戳) & 时间戳
honeycomb
2018-07-10 00:59:01 +08:00
@dawniii 客户端因为这样那样(比如恶意调用,bug )的重放。

比如在 v2 发帖,客户端没收到确认发帖成功回复,这个时候用户又点了几次发帖键,发出了几个相同的请求,如果有参数签名无论如何最多只会有其中一个有效,就不容易出现一个帖子发了两遍的问题。
akira
2018-07-10 01:59:51 +08:00
上 https 可以过滤掉百分之九十只会抓明文包的
做个数据校验又可以过滤掉百分之九十不会本地逆向的

安全措施这种东西,在成本允许范围内,从来都是只会嫌少 不会嫌多的
chengxiao
2018-07-10 05:36:50 +08:00
回去看抓包的...现在还有不会抓 https 包的吗?
lslqtz
2018-07-10 07:44:11 +08:00
@chengxiao 设备本地上 hpkp,啥抓包都玩完
iwtbauh
2018-07-10 07:48:06 +08:00
HTTPS 可以保护免受重放攻击,因为 TLS 不是纯粹的加密,中间人拿到密文后并不能直接发送给服务器,必须握手,而握手后
iwtbauh
2018-07-10 07:49:35 +08:00
HTTPS 可以保护免受重放攻击,因为 TLS 不是纯粹的加密,中间人拿到密文后并不能直接发送给服务器,必须握手,而握手后密钥是新的,所以并不能用之前的密文。

所以中间人是根本没有机会实施重放攻击。
abc612008
2018-07-10 07:52:41 +08:00
secret 一般不是鉴权用的吗…… https 的防止伪造只是对于中间人来说的吧,恶意用户主动伪造 https 是没法阻止的。
mengzhuo
2018-07-10 09:24:54 +08:00
TLS"只"保证传输层的 保密 防篡改 防冒充。名字都起得相当好,Transport Layer Secure。
对 LZ 的问题,人家不保证,你需要的是防止业务请求重放和鉴权。
md5 这个就已经是个漏洞了,自欺欺人而已。

p.s. 说能抓 https 包的,你们怕不是对 TLS 有什么误解吧?
你们都能物理接触或者有控制权的情况下,任何安全措施都是白搭。
说中间人的,你们试试双向证书校验的环境下抓抓包?
owt5008137
2018-07-10 09:43:11 +08:00
数据完整性校验 AEDA 了解一下?防重放的话 DH/ECDH 或者 RSA 每次服务端随机密钥。防中间人劫持可以通过只信任你自己的 CA 实现。

所以最简单的方法就是 https 配成密钥协商 ecdh+证书认证 ecdsa+加密算法 aes-128/192/256-gcm 或者 chacha20-poly1305。然后客户端设置成只信任自己的 CA。

完事儿。
he15hiss
2018-07-10 09:44:03 +08:00
首先看你这个接口是否公开的,如果是公开的,任何浏览器都可以访问,那不存在加密一说(大家都能看),当然如果这个接口带有一些敏感信息,应该加密,如果是想让别人抓不了这个接口,那双向认证了解一下

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

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

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

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

© 2021 V2EX