Android应用安全防护的点点滴滴

第二种验证证书稍微复杂一点,这种方式也只能简单的防止钓鱼,不能有效的防止钓鱼 。防止钓鱼最终还是靠用户分辨,在正规渠道下载应用 。
==但是如果把证书放在apk中也是一件很危险的事情,因为现在的反编译技术不得不服,所以目前觉得最好的方式,就是放在.so文件中.==可以进一步的降低风险 .
3. 通信数据尽量不使用明文形式.
前后端进行自定义算法进行加密,md5AES RSA 等等,算法推荐.so和java相互调用的形式.
4. 防抓包
System.getProperty("http.proxyHost");System.getProperty("http.proxyPort");
正常这两行代码获取的是null,如果返回不为空,就是挂代理了,那么就可以考虑是否不给数据了
5. token等等进一步的防护措施.
道高一尺,魔高一丈,未来的路还会很长.
三. 数据存储安全
有了数据就得存放,如果存放,就会被别人发现.所以得存好喽
1. 隐藏数据存储位置
在设备中,以’.'开头文件或者文件夹是不可见的,并且也可以进行读写操作.如果隐藏了存储了文件位置,就可以避免用户误操作和被发现的机会.
2. 存储内容不要使用明文
就算被找到,内容如果以密文的形式,也会降低被泄漏的风险
3. 代码中禁止硬编码重要信息内容
硬编码很容易被反编译找到.建议存储到.so中(虽然.so也可以被破解,但是相较于java更安全点)
4. 存储位置推荐
尽量存储到手机内部存储上,不要存储到外部存储卡上(因为手机内部存储只对相应的应用开放,外部存储对所有的应用都开放)
四. 组件安全
规范安卓标准组件(、、、)的访问权限
1. 设置权限开放属性::=[“true” | “false”]
属性为四大组件共有属性,其中含义大同小异 。默认值由其包含与否决定 。若未包含==,默认为“false”,若存在至少一个==,则默认值为“true” 。
表示是否允许外部应用组件启动 。若为“false”,则只能由同一应用或同一用户 ID 的不同应用启动 。
表示是否允许外部应用组件调用服务或与其进行交互 。若为“false”,则只能由同一应用或同一用户 ID 的不同应用启动 。

Android应用安全防护的点点滴滴

文章插图
表示是否可以接收来自其应用程序之外的消息,如来自系统或或其他应用的广播 。若为“ false”,则广播接收器只能接收具有相同用户ID的相同应用程序或应用程序的组件发送的消息 。
表示是否允许其他应用程序访问内容提供器 。若为“false”,则具有与相同的用户ID(UID)的应用程序才能访问它 。如果需要给其他应用程序提供内容,则应当限定读写权限 。
2. 配置自定义权限
自定义权限,限制自己的组件访问,详情看自定义权限与使用
3. 使用更加安全高效的r
区别基于实现的,r 是基于实现的,拥有更高的效率与安全性 。安全性主要体现在数据仅限于应用内部传输,避免广播被拦截、伪造、篡改的风险 。简单了解下用法:
(1).自定义
public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//Do SomeThing Here}}
(2).注册
MyReceiver myReceiver = new MyReceiver();LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);IntentFilter filter = new IntentFilter();filter.addAction("MY_ACTION");localBroadcastManager.registerReceiver(myReceiver, filter);
(3).发送本地广播
Bundle bundle = new Bundle();bundle.putParcelable("DATA", content);Intent intent = new Intent();intent.setAction("MY_ACTION");intent.putExtras(bundle);LocalBroadcastManager.getInstance(context).sendBroadcast(intent);