天天看点

银行类app如何保证安全性

做个几个银行类的app,他们对app安全的要求都比较高,这篇文章整理一些日常开发中的安全性处理注意的地方。

##sharedPreference

很多app在使用sharedpreferece储存个人数据,然后这部分储存是不安全的。

1.创建模式要正确MODE_PRIVATE。

因为如果是使用MODE_WORLD_READABLE创建的sharedpreference文件其他app是可以读取到的。如果是使用MODE_WORLD_WRITEABLE创建的sharedpreferece,虽然其他app是不能读取到,但是是可以通过获取跟你app相同的sharedUserId从而读取该文件的内容。

root权限下的用户不管哪种模式都可以读取到sharedpreferece里面的信息。

2.如果需要进程间数据共享,可考虑content provider。

3.尽量避免将密码等敏感数据信息明文存储在Shared Preferences中。

##网络传输

1.对敏感信息进行对称加密。如3Des,RSA加密。

2.不建议对整个传输的报文进行加密,因为数据量比较大,可对请求数据进行单向加密,生成一个sign,然后上传到服务端,让服务端进行同原文的比对。验证数据有没有被篡改。

3.在物理传输层可使用https的传输方式来替代http协议。HTTPS 是 HTTP 的安全版本,为什么这么说呢?因为HTTPS 自带加密、验签、检查数据完整性等功能,它在 HTTP 下加入了 SSL (Secure Socket Layer),SSL 位于 TCP/IP 和 HTTP 协议之间,负责加密、验签、检查数据完整性工作

##其他

1.本地文件敏感数据不能保存,如要要保存,必须进行加密,加密算法不能是伪加密,比如Base64加密。

2.对于存在本地的密钥,可使用jni保存到so文件里面。

3.apk打包要进行签名和混淆处理。

4.日志打印要进行控制。

5.页面跳转做app防劫持处理。

##app加固

有一些第三方的公司专门对app做加固操作,防止应用被逆向分析,反编译,二次打包。

或者使用360提供的免费加固等。

##防止界面劫持

在android系统中,程序可以枚举当前运行的进程而不需要声明任何权限,如果攻击者注册一个receiver,响应android.intent.action.BOOT_COMPLETED,使得开启启动一个service;在这个service中启动一个计时器,不停枚举当前进程中是否有预设的进程启动,如果发现有预设进程,则使用FLAG_ACTIVITY_NEW_TASK启动自己的钓鱼界面,而正常应用的界面则隐藏在钓鱼界面的后面。

防止劫持的办法是启动一个Service(在页面onCreate的时候去启动这个服务),然后判断当前页面的包名和系统栈顶页面的包名是否一致,如果不一致的话有可能被劫持的风险,则app给出相应的提示或者跳转到相应的页面。

继续阅读