在 HTTPS 时代对请求进行签名是否还有必要?

2023-09-25 19:21:43 +08:00
 cheetah

今天看到百川大模型的接口文档 https://platform.baichuan-ai.com/docs/api 中要求对请求内容和时间戳进行签名,想到前几天在 V2EX 看到的帖子吐槽腾讯大模型 API 的签名( https://v2ex.com/t/975832 )。

而我们去看 OpenAI 等公司提供的 API ,是不需要这种签名的。

所以想讨论一下,在 HTTPS 时代这种签名是否还有必要?还是一种思维惯性?

我的理解:在 HTTPS 之前,这样的签名可以有效防止请求内容被篡改,是很有必要的,但现在 HTTPS 普及了,这里的好处并不存在了。另一点是重放攻击,我了解不多,请懂的朋友讲讲。

9434 次点击
所在节点    程序员
135 条回复
9Y8lCIS38J8AlhRs
2023-09-26 17:39:31 +08:00
哪有什么绝对的安全,如果是再用一些不常用的方式提供 API 接口调用,还不是项目经理在装 X ?
gadfly3173
2023-09-26 17:45:03 +08:00
@cheetah 是的,和签名没关系,只是产品层面是否公开 appid 的区别。我猜这个大模型用签名是公司上游中间件只支持了签名的模式,没有支持单 token 的授权模式,在他这个场景签名确实没有必要
zpf124
2023-09-26 17:46:31 +08:00
现在签名主要也就是防重放和随意修改链接参数了。
iugo
2023-09-26 17:53:47 +08:00
就事论事, 签名只能防止数据被修改, 不能防止中间人看数据. 和 HTTPS 解决的部分问题是一样, 但 HTTPS 做了更多.

那么强调签名必要性的愿意就只有一个了, 不信任 HTTPS.

不信任 HTTPS 机制, 那就真是大牛.

如果信任 HTTPS 机制但还是不信任 HTTPS, 那就是不信任 CA.

CA 被攻破的概率不是没有, 但我觉得绝大多数人应该是信任 CA 的.
liuidetmks
2023-09-26 17:56:36 +08:00
国内营商环境环境,你接口不做校验防御,能刷死你

https 只能防止第三方中间人,不能防止别有用心的用户。

跳过 SSL PIN 的方法,太通用了,随便搜下就有方法

内置白盒加密算法 + 代码混淆 能挡住 90%的人,起码破解没那么容易。


如果是对公的 api ,我记得阿里一些接口是直接给白盒 sdk ,accesskey 是不在代码里面的
jiangzm
2023-09-26 18:04:49 +08:00
测重点不一样,
HTTPS 保证的事传输安全
接口签名保证的是客户端身份和请求有效性
pkoukk
2023-09-26 18:14:05 +08:00
Public API 还非要加,有时候也不是后端的要求
可能公司的对外统一网关就是这个要求
rekulas
2023-09-26 18:17:51 +08:00
综合来说 目前各大平台的签名主要保证了防重放防修改和不暴露 key 的情况下进行鉴权,跟 https 还是不重叠的,所以加了安全性还是会提高一些(当然我还是喜欢 key 放 header 一把梭的接口。。)


@iugo 也可以防中间人的,有些服务用的非对称通信,反正越搞越麻烦了
CRUD
2023-09-26 18:18:11 +08:00
服务器对服务器单向调用的情况下,我觉得签名确实没必要,一个 token (或者叫 apiKey secret 之类的)可以识别当前请求者是谁就行了,这种情况下,加上 https 单向认证,以及 TLS 中本身包含的序号和时间戳可以防止请求重放,从网络层面,以我的见识想不到什么攻击的地方。

上面几个楼层说的签名也确实有其应用场景,但不是楼主想问的场景。
CRUD
2023-09-26 18:28:01 +08:00
@CRUD #69 纠正一下:以及 TLS 中本身包含的序号可以防止同一 TCP 连接中对某一次请求的重放
wy315700
2023-09-26 18:32:13 +08:00
一个是传输层安全
一个是应用层安全

根本不同的应用场景

大部分服务器架构都是用负载均衡承接 SSL ,进了内网就都是明文了。所以有些应用层会单独加一个安全校验。因为他不能保证外部请求被通过 SSL 来调用。
LLaMA2
2023-09-26 18:40:29 +08:00
1.有些项目部署的时候可能会让 https 的服务器证书前置化,在防火墙层就已经解密了数据了,然后后端都是 http 的,这时候业务部门不希望关键的数据被网络运维部门的人知道,避免不必要的隐患。

2.重放攻击

3.相关法规硬性要求。


总之
HTTPS 保障传输中不被中间人窃取
签名是保证增加一些篡改和窃取的难度
hsymlg
2023-09-26 19:08:43 +08:00
抓包改请求,防重放用的,和 https 我只能说有交集但是不多。
kingfalse
2023-09-26 19:20:08 +08:00
楼主这是没被爬虫毒打过。
flyqie
2023-09-26 19:20:14 +08:00
我这边有个场景,不知道是不是跟楼主说的是类似的玩意。

后端需要给前端返回一个带 sign 的 wss 地址,前端连接该地址实现 sdp 的实时交换。
Huelse
2023-09-26 19:31:39 +08:00
其实就是相当一部分人不能理解浏览器控制台能看到所有明文数据是正常的,然后疑问这也能算加密?

殊不知整个浏览器包括他所看到的内容都是客户端的一部分,能看到明文是理所当然的。

再深入就是内存安全和操作系统安全了,但说这些他们又不懂了,还是所看即所得的思维。
Bingchunmoli
2023-09-26 19:52:30 +08:00
@rocmax 但是实际情况并不是 hsts 情况,
ShuWei
2023-09-26 20:23:55 +08:00
up 说的是那种对请求内容进行计算得到一个哈希串的方式吧,其实必要性真的几乎没有,不过目前国内互联网好像流传着 https 也并不安全的思想,虽然我也不知道这个思想是怎么流传起来的
zhleonix
2023-09-26 21:04:05 +08:00
本地给你来个企业根证书就能绕过 https 了。
cheetah
2023-09-26 22:12:06 +08:00
@ShuWei 对的

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

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

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

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

© 2021 V2EX