金融类应用如何安全保证
之前做过一款理财p2p应用,也开始慢慢有了安全方面的意识。
随着逆向技术的普遍,绝对的安全已经不再存在了。为了让自己的应用更加安全下面谈谈个人在理财应用怎么达到相对安全的安全要求。
1.网络安全
https 请求
参数的加密 -每个公司都有自己的一套加密规则,一般都会用AES,RSA,MD5 等组合来做加密处理,这样发送请求的参数不会再裸奔了。
参数中间被修改验证 - 这一步主要验证参数再客户端和服务器端传输过程中有没有被修改 一般会用MDS。
2.数据,算法安全
敏感数据和算法尽量保存到服务器。
数据库加密 -暴露在沙盒里的数据库甚至可以通过iTools轻松打开。
keychain的使用 -尽量使用keychain,内容加密处理,这样相对提高安全。
避免内存缓存 -重要的数据通过变量来使用以后一定要及时释放内存。这样可以避免黑客直接hook你的变量,内存地址。
self.cardNO = @"12345434565677654";
[session POST:@"https://api.getMoney" parameters:@{@"cardNO":cardNO} progress:^(NSProgress * _Nonnull downloadProgress) {}
//敏感数据用完释放
self.cardNO = nil;
3.流程上安全
控制session(token)的有效期 - 一般安全性较高的应用会相对缩短session的生命周期,多进行验证,保证用户客户端上角度上的安全使用。
多渠道密码- 先可以通过 touchID,手势密码,人脸验证等来做第一层的简单验证。
请求流程安全控制 -转账,提现等这些请求对客户端来说为其重要,不仅请求本身安全上,还要控制保证整个流程上。
举个例子:当a通过客户端进行转账操作 我们把这些操作做分解
1.客户端请求服务器转账操作
2.服务器处理
3.服务器返回客户端转账结果
假设1,2操作顺利完成的情况下 a 突然上地铁手机没有信号了 导致第3步骤没有正常执行。
这样以后会出现客户端和服务端不同步的情况。这种情况下我们可以对这些请求加一些类似3次握手的过程,让每一步都得到确认,修改以后我们的操作分解
1.客户端询问服务器是否可以转账
2.服务器返回允许
3.客户端请求服务器转账操作
4.服务器处理
5.服务器返回客户端转账结果
6.客户端上传回执消息通知服务器是否得到结果
这样可以保证所有的流程的完整性
对客户端来说没有绝对的安全。不管你设计了多么错综复杂加密策略,黑客都会hook到你的钥匙。最好的方法是把这些策略和敏感信息放到服务器里。过度追求安全会影响性能上的表现,这也是我们权衡的地方。