Android安全——客户端安全要点

打印 上一主题 下一主题

主题 1534|帖子 1534|积分 4602

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
android:name=“com.fedming.demo.ACCESS”
android:permissionGroup=“string resource”
android:protectionLevel=[“normal” | “dangerous” | “signature” | …] />
2、android:protectionLevel=”signature”表示签名保护级别,“签名”级别权限的内容对用户完全透明开放,而且只有由执行权限查抄的应用的开辟者签名的应用才可访问这些内容。
3、应用到四大组件或者Application中android:permission=”com.fedming.demo.ACCESS”,即可实现对非同一签名应用的限定性访问。一般用于一些内部应用之间共享的私有组件。
使用更加安全高效的LocalBroadcastManager
区别基于Binder实现的BroadcastReceiver,LocalBroadcastManager 是基于Handler实现的,拥有更高的效率与安全性。安全性重要体现在数据仅限于应用内部传输,制止广播被拦截、伪造、窜改的风险。简朴了解下用法:


  • 自定义BroadcastReceiver
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Do SomeThing Here
}
}


  • 注册Receiver
MyReceiver myReceiver = new MyReceiver();
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter filter = new IntentFilter();
filter.addAction(“MY_ACTION”);
localBroadcastManager.registerReceiver(myReceiver, filter);


  • 发送本地广播
Bundle bundle = new Bundle();
bundle.putParcelable(“DATA”, content);
Intent intent = new Intent();
intent.setAction(“MY_ACTION”);
intent.putExtras(bundle);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);


  • 在Activity烧毁时取消注册
@Override
protected void onDestroy() {
super.onDestroy();
localBroadcastManager.unregisterReceiver(myReceiver);
}
Application干系属性配置


  • debugable属性 android:debuggable=[“true” | “false”]
很多人说要在发布的时候手动设置该值为false,其实根据官方文档阐明,默认值就是false。


  • allowBackup属性 android:allowBackup=[“true” | “false”]
设置是否支持备份,默认值为true,应当慎重支持该属性,制止应用内数据通过备份造成的泄漏问题。
三、WebView安全



  • 审慎支持JS功能,制止不须要的贫苦。
提到对于Android4.2以下的JS恣意代码执行毛病,Android4.2以下?不必支持了吧!


  • 请使用https的链接,第一是安全;第二是制止被恶心的运营商挟制,插入广告,影响用户体验。
  • 处理file协议安全毛病
//若不需支持,则直接克制 file 协议
setAllowFileAccess(false);
setAllowFileAccessFromFileURLs(false);
setAllowUniversalAccessFromFileURLs(false);


  • 密码明文保存毛病
由于webView默认开启密码保存功能,所以在用户输入密码时,会弹出提示框,询问用户是否保存。若选择保存,则密码会以明文形式保存到 /data/data/com.package.name/databases/webview.db中,这样就有被盗取密码的危险。所以我们应该克制网页保存密码,设置WebSettings.setSavePassword(false)


  • 开启安全欣赏模式
<meta-data android:name=“android.webkit.WebView.EnableSafeBrowsing”
android:value=“true” />

启用安全欣赏模式后,WebView 将参考安全欣赏的恶意软件和钓鱼网站数据库查抄访问的 URL ,在用户打开之前给予危险提示,体验类似于Chrome欣赏器。
四、数据存储安全;



  • 秘钥及敏感信息
此类配置应当妥善存放,不要在类中硬编码敏感信息,可以使用JNI将敏感信息写到Native层。


  • SharePreferences
首先不应当使用SharePreferences来存放敏感信息。存储一些配置信息时也要配置好访问权限,如私有的访问权限 MODE_PRIVATE,制止配置信息被窜改。


  • 签名配置signingConfigs
制止明文保存签名密码,可以将密码保存到本地,无需上传版本控制系统
在app目录下建立一个不加入版本控制系统的gradle.properties文件:
STORE_PASSWORD = qwer1234
KEY_PASSWORD = demo1234
KEY_ALIAS = demokey
gradle将主动引入gradle.properties文件,可以直接在buld.gradle文件中使用:
signingConfigs {
release {
try {
storeFile file(“E:\FDM\Key\demo.jks”)
storePassword STORE_PASSWORD
keyAlias KEY_ALIAS
keyPassword KEY_PASSWORD
}catch (ex) {
throw new InvalidUserDataException(“You should define KEYSTORE_PASSWORD and KEY_PASSWORD in gradle.properties.”)
}
}
}
五、数据传输安全



  • 使用HTTPS协议
HTTPS的重要头脑是在不安全的网络上创建一安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信托时,对窃听和中间人攻击提供合理的防护。可以说黑白常基础的安全防护级别了。


  • Android网络安全性配置
该特性让应用可以在一个安全的声明性配置文件中灵活的自定义其网络安全设置,而无需修改应用代码,满足更高的安全性要求。
在AndroidManifest.xml中配置networkSecurityConfig:
<?xml version="1.0" encoding="utf-8"?> <manifest … >
<application android:networkSecurityConfig=“@xml/network_security_config”
… >

network_security_config文件如下:
<?xml version="1.0" encoding="utf-8"?> example.com
以 PEM 或 DER 格式将自签署或非公共 CA 证书添加到 res/raw/my_ca。这让我回想起年前听到渗透测试结果时的恐惊,好家伙,自己装了个证书…
这部分更多细节、功能请参考官方文档网络安全配置
六、其他安全问题



  • 日志输出
日志是我们开辟调试中不可或缺的一部分,但也是最轻易泄露敏感信息的地方。所以,在我们发布应用时,应当关闭、甚至移除Log输出。


  • 肴杂、加固
肴杂代码,可以增加反编译破解的难度。但是我们在使用肴杂功能时也要留意实体类、与JS交互的方法、第三方肴杂配置等问题。
应用加固也是近年来比力热门的应用安全办理方案,各大厂商都有自己的加固方案,常见的如腾讯乐固、360加固等等。


  • 毛病检测工具

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

九天猎人

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表