我在做客户端请求api的时候想做参数签名验证,我的做法很简单就是将请求参数排序然后&连接,然后加个‘盐’然后再md5,这里说到‘盐’这个地方卡住了,因为html5+的这个体系无法‘保密存储配置信息’(配置信息存储到js里面,如果被反编译apk的话很容易获取到这个‘盐’进行相关api试探了),所以我找到了文章【http://ask.dcloud.net.cn/article/12744】其中作者提到可以使用plus.push.getClientInfo().appid把这个信息当做 盐来处理(因为manifest翻遍包获取不到这个文件),通过我的测试我发现以下问题:
- 在manifest.json中配置的push.appid与真正获取到的值不相同。
- 通过plus.push.getClientInfo().appid方式获取的值会变化,有的时候获取的一样,有的时候获取的不一样。
求问:上面为什么获取的值有的时候不一样呢?有什么方法能在本地秘密存储应用的配置信息吗?谢谢各位。
g5hdyd (作者)
嗯,按照你说的确实是可以的,只是增加了别人破解的时间成本罢了,那也就意味着如果使用h5+的开发方式的话公共api基本上就是100%暴露的,没有办法做签名验证这些操作。
关于您上面说的真机测试获取的喝打包获取的不一致的问题,我刚才重新确认了一下,平台不同所以获取的不同,ios各个模拟器 ip6 plus ip7等都是一样的,android下的是另外一个不同设备没测试,那按照您这样说的话,这样方法也就是障眼法而已。
所以防止别人解包,求助‘爱加密’等这样的公司可以么?
感谢您的回答,谢谢。
2017-12-15 18:03
回梦無痕
回复 g5hdyd:爱加密这些不适用我们这种方式的APP
其实你增加破解成本就行了,比如密钥由plus.push.getClientInfo().appkey+cookie里的某些字段组成,cookie的关键字段由初次打开app时候确定,并期限,过期重新生成,而且每个客户端生成都不一致,js全写在文件里,并加上混淆。
方法有很多。其实破解的人主要还是看你的app有没有这个破解价值。
2017-12-15 18:16
g5hdyd (作者)
回复 回梦無痕:感谢回复,谢谢~清楚了。十分感谢
2017-12-15 18:34