App 接口数据安全一般怎么处理?

2017-09-19 14:11:59 +08:00
 kim2x

目前在开发一款 App,过程中发现客户端和服务端传输数据可能会发生数据泄漏或者安全隐患,服务端采用的是 java,以主流的框架开发的 spring 为主,数据传输以 http 协议,格式为 json,对于敏感数据做了部分的安全处理,在客户端进行了数据加密再进行传输,但是响应结果以 json 暴露了出来,感觉有点不放心,不知大佬们有啥手段可以处理,我通过抓包拦截其他 app 请求,发现其响应结果都是被处理了,看到都是乱码字符,V 友们友 app 开发经验的希望可以多交流知道。小弟恭候 V 友们!!!

12372 次点击
所在节点    程序员
48 条回复
zgbgx1
2017-09-19 14:21:47 +08:00
没做过 app 开发,但是返回的数据混淆或者加密的意义并不大
安全,首先上 https 吧
如果 你不像被直接抓包,就直接加密的字符串,再到 app 进行解密,这和前端解密应该是一个道理
LeeSeoung
2017-09-19 14:22:30 +08:00
乱码是上了 https 吧,https 也是可以通过在手机安装 fake 证书抓包的。。只要在你接口那边做到参数严格检查,校验数据完整,不被非法修改就够了吧。。返回明文密文关系不大,密文在你 app 内部还是要被解密,照样能被人拦截。。特别重要的。。上 tcp,自己定义套通信协议。。没人能看懂那种。。
banksiae
2017-09-19 14:22:47 +08:00
pb 传输,减少数据包大小。数据加密,一般 aes,或者找个开源的算法改一下;
hugedata
2017-09-19 14:43:51 +08:00
有 fiddler 在 https 也一样玩儿玩。不过有总比没有好,还是 https 先上了吧。123 楼建议均可以考虑。如果有富余的时间和精力的话,把用户行为加上吧,判断是否是机器人。加上黑名单 IP,比如垃圾邮件的黑名单,IDC 机房的黑名单之类的。哪儿有绝对安全的系统哦。唉。
miaomiao0323
2017-09-19 14:44:27 +08:00
传过去加密了,返回回来当然也可以加密啊,服务端加密,客户端解密,安卓的话算法和 key 不要用 java 写,写在 so 里
zjw7sky
2017-09-19 14:46:41 +08:00
数据传输加密,解析解密,通用参数不加密
pangliang
2017-09-19 14:47:54 +08:00
返回结果加密的意义真的不大, 就一个心里安慰而已
zhouyou457
2017-09-19 14:57:44 +08:00
https 传输,敏感数据 base64 加密,再不行把数据打成 zip 包再用 base64 加密然后传输过去
whatgui
2017-09-19 15:05:19 +08:00
https 解决你的一切问题。不要自己再去造轮子了。
sunchen
2017-09-19 15:12:13 +08:00
@zhouyou457 base64 是编码。。。
sunchen
2017-09-19 15:16:48 +08:00
1. 上 https, 加验证证书逻辑,防止中间人,
2. 数据用 aes 之类的进行对称加密,可以和加密逻辑整体写到 so 里
3. app 混淆加固做好,防止直接逆向和被 xposed 劫持
sunchen
2017-09-19 15:17:46 +08:00
@banksiae protobuf 可以被逆向,不过数据字段需要猜一下才能对应起来
sunchen
2017-09-19 15:19:16 +08:00
@hugedata 客户端对证书验证严格的话,中间人问题可以避免
sunchen
2017-09-19 15:20:35 +08:00
@LeeSeoung xposed 直接 hook 协议解析的地方,dump 解析后的数据结构出来可破
mornlight
2017-09-19 15:22:05 +08:00
如果是不想通信过程被窃听或篡改,部署 HTTPS 就行了。如果连被用户自己抓包都不想,就在客户端 Pin 证书。
LeeSeoung
2017-09-19 15:24:05 +08:00
@sunchen 不解析协议到数据结构,纯粹解析数据流执行对应条件分支。。我相信够恶心一部分逆向的了。。再保险点,把通讯过程放到 so,so 也做加密处理。。- -我觉得这么一套下来估计够呛了。
hugedata
2017-09-19 15:29:08 +08:00
@sunchen 好吧,客户端,但是用 http 测试工具之类的来模仿客户端的话,就不存在“客户端对证书验证严格的话”这种情况了,比如写爬虫时分析对方的返回 json 数据的服务时,不都是这么干么。
sunchen
2017-09-19 15:36:52 +08:00
@hugedata 服务端可以验证 API 的签名啊
sunchen
2017-09-19 15:38:56 +08:00
@hugedata 其实客户端对证书验证严格的话,抓不到 https 的包,连 api 的参数都看不到的
sumuu
2017-09-19 15:41:37 +08:00
我一般会从两个点去看待这样的问题.
1. 数据是否必须强加密?
很显然,不是什么数据都需要去加密,因为加密还是需要一定的成本.


2. 如何加密

AES 就好.


接口数据安全的处理?
1. 所有请求和响应都会把相关字段加密,生成一个 sign 的字段,然后 接受数据方需要做数据校正.
2. 敏感信息,都是服务端加密,客户端无法解密.



最后 HTTPS 是必须的,不是盲目崇拜 HTTPS,这个是基本,就像换衣服你得在家里等,不会在外面.

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

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

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

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

© 2021 V2EX