美文网首页
Android 开发中的若干安全问题 之 Activity篇(转

Android 开发中的若干安全问题 之 Activity篇(转

作者: 生儿育女一辈子 | 来源:发表于2016-06-03 16:25 被阅读273次

    Android 开发中的若干安全问题 之 Activity篇

    发布时间:2016-01-08 10:13 | 作者:采集侠 | 来源:网络整理 | 浏览:119

    1.    本app内部使用的activity一定要设置为非公开

    不准备对外公开的activity一定要设置为非公开,以防止被人非法调用

    [html]

    android:name=".PrivateActivity"

    android:label="@string/app_name"

    android:exported="false" />

    android:name=".PrivateActivity"

    android:label="@string/app_name"

    android:exported="false" />

    同时,一定要注意的是, 非公开的Activity不能设置intent-filter

    因为,如果假设在同一机器上,有另外一个app有同样的intent-filter的话, 调用该Activity的intent会唤醒android的选择画面, 让你选择使用那个app接受该intent。这样就会事实上绕过了非公开的设置。

    2.    不要指定taskAffinity

    Android中的activity全都归属于task管理 , 简单说来task是一种stack的数据结构, 先入后出。

    一般来说, 如果不指明归属于什么task, 同一个app内部的所有Activity都会存续在一个task中,task的名字就是app的packageName。

    因为在同一个andorid设备中,不会有两个同packageName的app存在,所以能保证Activity不被攻击。

    但是如果你指明taskAffinity,比如如下

    [html]

    android:taskAffinity="com.winuxxan.task"

    android:label="@string/app_name">

    android:taskAffinity="com.winuxxan.task"

    android:label="@string/app_name">

    那此时,恶意软件中的Activity如果也声明为同样的taskAffinity,那他的Activity就会启动到你的task中,就会有机会拿到你的intent

    3.    不要指定LaunchMode(默认standard模式)

    Android中Activity的LaunchMode分成 以下四种

    Standard:   这种方式打开的Activity不会被当作rootActivity,会生成一个新的Activity的instance,会和打开者在同一个task内

    singleTop:      和standard基本一样,唯一的区别在于如果当前task第一个Activity就是该Activity的话,就不会生成新的instance

    singleTask:系统会创建一个新task(如果没有启动应用)和一个activity新实例在新task根部,然后,如果activity实例已经存在单独的task中,系统会调用已经存在activity的 onNewIntent()方法,而不是存在新实例,仅有一个activity实例同时存在。

    singleInstance: 和singleTask相似,除了系统不会让其他的activities运行在所有持有的task实例中,这个activity是独立的,并且task中的成员只有它,任何其他activities运行这个activity都将打开一个独立的task。

    相关文章

      网友评论

          本文标题:Android 开发中的若干安全问题 之 Activity篇(转

          本文链接:https://www.haomeiwen.com/subject/gvfldttx.html