在Provider中:
表示是否允许其他应用步调访问内容提供器。若为“false”,则具有与Provider雷同的用户ID(UID)的应用步调才气访问它。如果需要给其他应用步调提供内容,则应当限定读写权限。
1、在AndroidManifest.xml中界说一个名称为com.fedming.demo.ACCESS的权限:
<permission android:description=“string resource”
android:icon=“drawable resource”
android:label=“string resource”
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实现的,拥有更高的服从与安全性。安全性主要体如今数据仅限于应用内部传输,避免广播被拦截、伪造、篡改的风险。简单了解下用法:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Do SomeThing Here
}
}
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);
@Override
protected void onDestroy() {
super.onDestroy();
localBroadcastManager.unregisterReceiver(myReceiver);
}
Application相关属性设置
- debugable属性 android:debuggable=[“true” | “false”]
很多人说要在发布的时候手动设置该值为false,其实根据官方文档说明,默认值就是false。
- allowBackup属性 android:allowBackup=[“true” | “false”]
设置是否支持备份,默认值为true,应当慎重支持该属性,避免应用内数据通过备份造成的走漏问题。
三、WebView安全
提到对于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来存放敏感信息。存储一些设置信息时也要设置好访问权限,如私有的访问权限 MODE_PRIVATE,避免设置信息被篡改。
避免明文生存署名暗码,可以将暗码生存到当地,无需上传版本控制体系
在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的主要思想是在不安全的网络上创建一安全信道,并可在利用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供公道的防护。可以说是非常基础的安全防护级别了。
该特性让应用可以在一个安全的声明性设置文件中灵活的自界说其网络安全设置,而无需修改应用代码,满足更高的安全性要求。
在AndroidManifest.xml中设置networkSecurityConfig:
<?xml version="1.0" encoding="utf-8"?> <manifest … >
<application android:networkSecurityConfig=“@xml/network_security_config”
… >
…
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |