在 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 普及了,这里的好处并不存在了。另一点是重放攻击,我了解不多,请懂的朋友讲讲。

7889 次点击
所在节点    程序员
135 条回复
wudaye
2023-09-25 19:27:54 +08:00
好问题。我能想到的一点是,万一被侵入内网了呢
julyclyde
2023-09-25 19:40:13 +08:00
双向证书 https 的话,我觉得不需要
momocraft
2023-09-25 19:40:42 +08:00
刻舟求剑
ospider
2023-09-25 19:45:21 +08:00
惯性思维,鉴定完毕。现在签名唯一的作用是反爬,自己提供的 API 还签名,纯属脱裤子放屁
cheetah
2023-09-25 19:46:25 +08:00
@ospider 签名对反爬没帮助吧?
ospider
2023-09-25 19:48:01 +08:00
@cheetah #5 当然有了,一个经过充分混淆的签名算法,至少能拦下一大批脚本小子
cheetah
2023-09-25 19:50:32 +08:00
@ospider 哦这个意思,不是 public API ,明白了
1423
2023-09-25 19:52:23 +08:00
apikey 是与预共享的
非对称可以避免抵赖
cheetah
2023-09-25 19:54:02 +08:00
@1423 “与预共享”是什么意思
tool2d
2023-09-25 19:54:30 +08:00
"但现在 HTTPS 普及了,这里的好处并不存在了。"

需要 SSL pin 才能确保证书不是中间人的。现在 root 后的安卓手机,挂一个自签 CA 证书,实在太方便了。
cheetah
2023-09-25 19:57:16 +08:00
@tool2d 这些 API 也不是给客户端环境调用的呀,是服务端调用的
xmumiffy
2023-09-25 20:15:34 +08:00
确实没有必要,但国内主流都这么做,你不这么做就要解释为什么不这么做,教他们为什么 HTTPS 是足够安全的。
天天解释累了,就加上了
ysc3839
2023-09-25 20:16:33 +08:00
个人印象中签名更多是防第三方客户端,把签名的 key 各种加密混淆藏起来,让你抓到包了也没法直接调用,得花时间找 key 。除此之外似乎就只有防重放攻击了。
其实签名的 key 就是预共享密钥(PSK)了,配合 http 使用时完全可以把所有数据都加密。
leonshaw
2023-09-25 20:28:23 +08:00
认证用吧,没有 SSL pin 请求里直接放 secret 可能被中间人。
euph
2023-09-25 20:41:19 +08:00
我也觉得没必要签名,不然我抓包都没意思了
tool2d
2023-09-25 20:58:48 +08:00
@cheetah "这些 API 也不是给客户端环境调用的呀,是服务端调用的"

我一直是客户端调用的,当然我是自己用,不怕 api key 外泄。

如果是服务器之间通讯,似乎确实没太大必要。就一个 MD5 ,就算有中间人,人家也随手给加上了。

难是难在未知 KEY 的加密签名,比如 HMAC 签名,至少能防一部分恶意请求。
walpurgis
2023-09-25 21:01:52 +08:00
没必要,国内搞签名跟万年 java8 有异曲同工之妙,很多技术决策者的思想已经僵化了,举例子 OAuth1.0 标准是要求签名的,2.0 标准要求 HTTPS 后就去掉了签名

非 public api 防爬虫防抓包啥的,其实是把签名当成加密来使用了,直接套一层 aes 效果更好也更简单
rocmax
2023-09-25 21:13:41 +08:00
@xmumiffy 同感,跟别人解释过这个问题,对方没话说了就是一句万一 ssl 有漏洞呢。我心说能攻破 ssl 的人看得上你这点破数据吗?
gadfly3173
2023-09-25 21:23:06 +08:00
微信支付的回调 api 是有独立证书的加密和验签的,这样可以保证你收到的支付成功回调是微信发出的而不是伪造的(因为你的回调接口在公网,如果这个地址泄露了别人就可以伪造支付成功请求给你了)。这种客户端调服务商的接口确实没什么必要,毕竟你的 access token 泄露了也不耽误服务商赚钱,只能说是防傻子的一道保险
Bingchunmoli
2023-09-25 21:40:39 +08:00
@rocmax 并不是攻破,而是拒绝 https 又提供 http 服务,国内很多都是同时支持 http 和 https 的

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

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

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

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

© 2021 V2EX