app的安全性(一)

Activity和service的安全性。

  Activity 可以被其他的Activity启动起来。 如果启动该activity的应用不是受信的activity,那么导致的结果是未知的。

  一种情况,你的activity跑到了别的应用的task里面,这样别的应用在返回的时候,就会调用出你的activity。当然了这种情况在某种意义上可以提高用户体验。

  另一种情况,别人通过满足你在Mainfest里面定义的inflate来调用你的activity。

  

   第一种情况的出现是因为在mainfest里面对application或者activity定义了taskAffinity和allowTaskReparenting

  android:taskAffinity=“xxx.xxx”

  android:allowTaskReparenting="true"

"XXXActivity"/>

   这样应用程序包名为xxx.xxx就可以和你在同一个task里面了,就可掉出你的Activity了。例如应用A和B有相同的taskAffinity,则A启动后,切后台。B启动,在home键的的和时候A就被拉起了。

android:taskAffinity意思是:这个application或者activity定义的Task名为xxx.xxx。如果不定义,则默认为本应用程序的包名。

android:allowTaskReparenting="true"的意思是,该activity或者application可以更改从属task。

因此建议不要设置这两个属性,放置其他应用程序劫持你的task。

第二种情况的出现因为在mainfest里面对activity定义了exported=true

      这个属性的意思就是外面的apk你可以调用我了。至于怎么调用,一般会定义一个filter。如此暴露必然会引起问题规避这样的问题是加校验如:Context.checkCallingPermission()或在mainfest文件里面添加校验android:permission=“com.xxxxx.xxxx”

Provider的安全性

Provider提供数据访问的接口,具有数据的增,删,改,查。所以这种组件自身需要校验更加严格。其中需要以下几种校验:

1    url校验,最基础的校验。

2    permission校验,如果没有定义某一权限,则不予以回复或者给出限定性的结果。(动态+静态)

3    contentValues校验,防止访问没有开放上的数据内容。

Broadcast的安全性

对于广播的接收方来说,如果只接收应用内部的广播,则需要指定android:exported=false,从而和外界app隔离。或者使用本地广播LocalBroadcastManager来提高安全性。

对于广播的发送方来说,为了避免发送信息被劫持或者数据被窃取,需要将接收方写死到类级别。Intent.setClass(My.this, Receive.class)。

你可能感兴趣的:(Android)