请教接口 signature 的问题

2019-07-16 11:27:25 +08:00
 GGGG430

参考了市面上很多接口 signature 参数生成方式, 基本都是选择某几个参数拼接上实现约定好的一个 key, 最后 md5 生成 signature.

这种方式我觉得在大数据(彩虹字典之类)下, 对方事先将所有字符串(长度低于一个阀值, 毕竟我们接口这里也不可能用很长的字符串)都生成一遍 md5,很容易破解.

各位大佬有觉得比较好的办法吗

2400 次点击
所在节点    问与答
41 条回复
GGGG430
2019-07-16 12:38:34 +08:00
@aWangami 没回复是觉得不够安全, 另外这个接口使用很广, 已经有爬虫破解过多次 signature 了, 目前在处理服务层反爬虫+业务接口层校验参数
lshero
2019-07-16 12:43:31 +08:00
反爬虫和签名的安全性真的没关系
你需要的是限制客户端账号的访问频率、增加识别是否为人类的验证码、数据中隐藏陷阱并吐出脏数据
MiffyLiye
2019-07-16 12:44:49 +08:00
前端程序都是公开的,signingKey 你准备怎么藏起来
GGGG430
2019-07-16 12:50:21 +08:00
@lshero 服务层正在做这件事

@MiffyLiye 业务层中虽然前端是暴露的,但我们也想提升相应的安全性,不然所有业务层接口都接入服务层反爬虫,代价过大
loading
2019-07-16 12:51:18 +08:00
楼主,加 slat 了解一下。
luckyrayyy
2019-07-16 12:53:01 +08:00
多层散列没有任何帮助,甚至有可能降低散列效果。

另外高安全性的东西肯定不能这么用,但是一般的接口,这个彩虹字典得多打才能破解得了啊,就算能行成本也太高了吧
luckyrayyy
2019-07-16 12:54:43 +08:00
哦我搞错了彩虹表的作用,楼上说得对加盐可破
GGGG430
2019-07-16 12:59:14 +08:00
@luckyrayyy 也许对方是通过反编译客户端来获取到的密钥 key, 被破解几次后不再相信这个了
GGGG430
2019-07-16 13:02:21 +08:00
@loading 没有理解好, 你能说一下具体吗, 和上面说的约定一个 key 来加密区别是什么
chinvo
2019-07-16 13:04:26 +08:00
大兄弟,反爬虫和 API 安全 无关

反爬虫是行为分析问题
GGGG430
2019-07-16 13:05:16 +08:00
@chinvo 两手并抓嘛
micean
2019-07-16 13:05:34 +08:00
“爬虫破解过多次 signature ” 说明是密钥外泄而不是被破解

应该像#22 那样限制每个客户端访问频率,签名是保护接口参数不被篡改,而不是防止被第三方调用的
yongliu
2019-07-16 13:10:30 +08:00
@GGGG430 爬虫破解的时候十之八九不是用的彩虹表,而是分析逆向你们前端代码得到的。看起来反爬虫才是你要解决的问题,而不是 signature 是否安全。signature 能解决大部分的问题,至于爬虫,你们可以通过更复杂的校验方式去识和处理,比如限制 ip,限制 cookie、限制 user-agent、前端代码混淆等方式组合处理。
Vegetable
2019-07-16 13:15:10 +08:00
闲的蛋疼吗这不是,我为什么要花那么大代价搞字典去破解你的签名,而不是反编译你的客户端?你自己把路走窄了,妄图通过签名来提高接口的“安全性”,这路子不太对吧。最关键的还是因为客户端跑在客户手里,你如果想反爬,应该走#22 说的路子才对
silverbooker
2019-07-16 13:54:46 +08:00
@GGGG430 你可以整体 md5 套 上部分参数 md5 再设计一些 shuffle 规则再加上 shuffle 规则动态更新,用彩虹表肯定是破不了的。不过做爬虫的人可是不会用彩虹表来破签名的,都是直接逆向反编译静态分析或者下钩子。

如果是 App 的话,可以看看一些商业壳。
如果不是的话,可以了解一下瑞数动态加密。
GGGG430
2019-07-16 14:22:01 +08:00
@silverbooker 嗯, 增加加密规则复杂度感觉在反编译 /逆向破解面前用处不大, 对方既然可以看到 key, 那也可以看到客户端的加密规则, 目前处在鸡肋的阶段中...
mritd
2019-07-16 16:49:51 +08:00
这种东西抛开业务空谈没有意义,加密强度取决与业务重要性,你就传个头像地址疯狂加密有啥用?所以没业务场景在这空谈没意义
summerwar
2019-07-16 19:41:33 +08:00
@GGGG430 我上面只是说了 楼主对彩虹表没有理解,不知道是啥概念,别的没讨论
danmu17
2019-07-16 21:30:10 +08:00
@lshero 可惜这里至少 90%的人对这些基本的概念都完全不了解。。。
welling
2019-07-16 21:45:21 +08:00
题主是没看懂 3 楼的话吧

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

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

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

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

© 2021 V2EX