开发的应用一般的拿到专业检测网站去检测一下,就会发现他说你的程序在裸奔,坑爹了。。。
这里记录下关于Activity,Service,BroadCastRecever的基本安全维护。
关于Activity,这里曝露在外面,第三方应用也可以访问页面进行操作,这里检测网站会提示“导致敏感信息泄露或者恶意攻击者精心构造攻击载荷达到攻击的目的”。好了,也就是说这项检查不合格了
解决方案:
1:给每个加上android:exported=”false” ,这个的意思是该页面组件只能是自己的应用程序才能访问,第三方应用不能访问,当然这个不能写在主页面。
2:给每个页面加上自定义权限。
<Activity name="" android:permission=""></Activity>
3:给Activity的启动模式最好就是系统默认的别改动。
关于Service的安全问题,其实都可以使用exported来管理。
解决方案:
1:服务不然其他应用程序访问,android:exported=”false”
2:添加自定义权限,步骤如下:
2-1:权限声明“`
2-2:声明该应用程序使用该权限
2-3:给Service加上访问权限
2-4:在Service中判断
if(checkCallingOrSelfPermission(permission)!=
PackageManager.PERMISSION_DENIED){
logi(tag,”验证通过”);
}
>3:在Service中判断启动给服务的包名是谁,不是本应用包名则不响应。
>获取启动服务包名:
>String pkname=intent.getComponent().getPackageName();
----
>关于BoradCastRecever的安全问题。
> 解决方案:
> 1:给广播加上只能本应用访问,其他应用发出的广播我们不接受(android:exported="false")。
> 2:和上面一样的加上权限。
> 3:当然也可以使用LocalBroadcastManager这里广播类来管理
> 使用如下:
LocalBroadcastManager mLocalBroadcastManager;
BroadcastReceiver mReceiver;
IntentFilter filter = new IntentFilter();
filter.addAction(“test”);
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(“test”)) {
//Do Something
}
}
};
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
mLocalBroadcastManager.registerReceiver(mReceiver, filter);
“`