关于 API 接口安全的思考,感觉 H5 端不好做,是不是各大厂主推 APP 也是这么考虑的

2021-03-07 23:19:48 +08:00
 0576coder

假如一个产品包含 H5 端、小程序、APP 端三端。 小厂为了方便,肯定三端会有一些公用的接口,那么自定义协议之类的肯定不能用,还得用 http 协议

那么问题来了,https 通过本地抓包的方式,还是能解析你接口里面的内容。为了防止别人爬你数据,脱机请求你接口。API 的安全其实是非常重要的。对此 我有如下想法,不知道大家有无更好的 idea

首先分两步,h5 、小程序只允许比如微信授权登录的用户进行操作,接口可以不加密,但是用户的登录凭证不要设置太长。

第二步 APP 在用户启动的时候进行一种密钥交换算法,通过后端动态安全的下发密钥。可以参考 Diffie-Hellman 算法 第二步,APP 后续与服务端通信的核心接口全走 aes-256 之类的对称加密方式传 sign 值给服务端,为了防止别人能够重放攻击,可以考虑 APP 与服务端维持一个长链,动态推送时间戳之类的方式,保证每次就算请求参数一样,加密出的 sign 值也是不一样的。

但是问题来了,密钥交换的时候如果别人猜出你的交换算法,也有可能导致中间人攻击,所以可以考虑 APP 内置一个 rsa 的公钥(不知道有无更好的方案)。 当然 APP 需要把这些东西封装成.so 文件,然后 APP 包再用付费的方式加固。这样应该能拦住百分之 99 的脚本小子了。

最后再加上一些实时的行为风控。比如用户访问过于频繁 或者浏览的内容超过正常人的量,可以动态的弹出图形验证码之类的做校验

6113 次点击
所在节点    程序员
43 条回复
wunonglin
2021-03-07 23:22:35 +08:00
你玩成花照样可以爬你
chendy
2021-03-07 23:26:54 +08:00
爬你的收益大于爬你的成本就会被爬
防御爬虫的成本大于被爬的损失就不用反爬
0576coder
2021-03-07 23:27:54 +08:00
@wunonglin

我感觉有些还是难爬的 除非你说上真机 ocr 识别
coosir
2021-03-07 23:29:13 +08:00
先说下目的,为啥花这么大精力去加密?不加密会怎么样?
既然你 h5 和小程序可以不加密,那就从这里突破就好了
muzuiget
2021-03-07 23:29:16 +08:00
http 也可以加密,把 http 当成外层协议,相当于每次 http 请求只 post 加密的二进制数据。
0576coder
2021-03-07 23:29:16 +08:00
@chendy
那整体的接口安全还是要做的把,比如你总不能就弄个 https 裸奔把

微信账号还是挺费钱的 就算它用群控微信的软件来登录爬你数据,我感觉爬虫方还是挺费钱的
0576coder
2021-03-07 23:30:30 +08:00
@coosir
h5 跟小程序需要授权登录 一个账号还是难爬多少数据的
一些核心功能可以提示去 APP 操作
0576coder
2021-03-07 23:32:08 +08:00
@muzuiget
那纯 h5 页面 js 都是可以看的到的,你加密成二进制的 js 代码就算再怎么混淆 别人也是可以执行的。这样在 h5 端的 js 里加密不就失去意义了吗
实在麻烦,人家直接启动一个无头浏览器
0576coder
2021-03-07 23:33:24 +08:00
@coosir
防止一些爬虫跟一些脱机脚本
muzuiget
2021-03-07 23:38:51 +08:00
@0576coder 所有客户端程序都是这样啊,难道其它 C/Java 不是这样吗?无非就是提高破解成本,人家有心,肯定能破解。
0576coder
2021-03-07 23:53:31 +08:00
@muzuiget
所以现在才咨询有无一套比较好的通用方法 能限制一些脚本小子
favourstreet
2021-03-08 00:14:34 +08:00
去想什么攻击和防御方的成本收益不过是心里安慰而已;无救济便无权力,加密并不能提供什么真正的反制措施,所以我建议楼主做好用户实名认证和基于验证码的流量控制……
yujiang
2021-03-08 00:15:15 +08:00
把 H5 砍掉 /引导到小程序,核心功能全塞进小程序里,限制微信登录+短信验证获取短效 api 令牌,限制单 ip 单位时间内请求数,ban 掉来自所有机房的 ip 。

最后说一句,其实把内容用 base64 还是什么偏门算法编码一下就能拦住 95%以上的傻屌,剩下的 5%不管上啥手段只要有利可图都没用。
0576coder
2021-03-08 00:17:34 +08:00
@yujiang
我很好奇 比如像阿里 头条这些厂,他们这一块谁负责的
单独的业务安全部门 还是风控部门
jones2000
2021-03-08 00:50:13 +08:00
数据内容 SSL 证书加密然后 base64 发送, 客户端 h5 公钥证书和解密用 c++做成 WebAssembly, 直接用这个解密。app 公钥证书和解密部分做在原生里面,webview 数据达到通过原生解密,在给页面。 小程序就不知道能不能用原生做解密插件了。
jeeyong
2021-03-08 01:25:46 +08:00
@chendy #2 道理是这么回事...实际上...都是试着写过爬虫了, 才知道收益比吧
xuanbg
2021-03-08 07:10:05 +08:00
能阻止爬虫的只有法律
gibber
2021-03-08 07:17:43 +08:00
@xuanbg 然而并不能
xiaocaoge
2021-03-08 07:26:33 +08:00
我的经验给我的判断是不可能存在这样一套机制,因为别人永远可以伪装成正常用户。而且这样也是没有必要的,大部分爬虫根本用不到这么复杂的机制就可以拦截了。我真得好奇什么样的内容值得这么去防护?
chinvo
2021-03-08 08:24:20 +08:00
加密不能防爬虫,请做验证码、频率限制、行为识别

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

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

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

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

© 2021 V2EX