安卓组件漏洞防护注意事项

防止利用系统组件漏洞

原则:最小化组件暴露

设置组件访问权限

组件传输数据验证

暴露组件的代码检查

activity编码安全

私有activity:

(1)不声明taskAffinity

(2)不声明 LaunchMode

(3) 设置exported为false

(4) 保证intent发送时的安全性,确定Intent是来自本应用程序

(5)在确保本应用程序发送Intent的时候,可以防止一些敏感信息

(6)启动Activity的时候不设置FLAG_ACTIVITY_NEW_TASK

(7) 使用显示Intent与指定的类的方式来调用一个activity

(8)敏感的信息放置在extra中发送

(9)在onActivityResult的时候应对返回的data小心处理

公共activity:

(1)设置exported为true

(2)接到Intent时注意小心处理

(3)finish时在Intent中放置一些敏感信息

伙伴activity:

(1)不声明taskAffinity

(2)不声明 LaunchMode

(3) 不设置intent-filler设置exported为true

(4) 使用白名单机制验证应用签名

(5)处理Partner Activity来的Intent时小心注意

(6)只返回给Partner Activity一些公开信息

另一方Partner Activity启动该activity

(1)不适用FLAG_ACTIVITY_NEW_TASK

(2)extra中不放置一些公开与不敏感的信息

(3) 使用显示intent,具体到报名、类名

(4) 使用startActivityForResult()启动Partner Activity,返回时可以做校验

内部activity:

(1)定义Activity的签名权限为signnature

(2)不声明taskAffinity

(3) 不声明 LaunchMode

(4) 不设置intent-filler设置exported为true

(5)验证签名

(6)验证intent传输的数据要小心

Brocast Recevier编码安全

Brocast Recevier分为:私有、公共、内部

也可分为静态广播和动态广播

私有广播:

(1)不设置intent-filler设置exported为false

(2)接收处理Intent信息的时候注意信息安全

(3) 可以防止一些重要的信息在Intent中传输,所有处理完毕后需要终止掉广播

公共广播:

(1)设置exported为true

(2)获取Intent的时候小心处理

(3) return result的时候别防止敏感信息

内部广播:

(1)定义一个内部的Signature Permission来发送、接受广播

(2)设置exported为true

(3) 动态、静态广播注册的时候也需要声明Signature Permission。

Service编码安全

私有service:

(1)设置exported为false

(2)接收处理Intent信息的时候注意数据的敏感性和来源的正确性

(3) 确保在同一个应用中的Intent才可以防止敏感信息

公共service:

(1)设置exported为true

(2)发送接收处理Intent信息的时候注意敏感信息

(3) return的时候不放置敏感信息

合作service:

(1)设置exported为true

(2)处理Intent信息的时候小心

(3) 注意返回消息,特别是敏感信息的接收对象

内部service:

(1)建立一个signature的permission

(2)给待启动的service添加permission

(3) 不设置intent-filler设置exported为true

(4)在不同的内部应用中使用相同的签名

(5)使用intent发送、返回数据的时候注意敏感信息的处理

Provider编码安全:

私有content provide:

(1)2.2之前的版本别使用

(2)设置exported为false

(3) 只能在同一个应用程序中进行敏感信息的发送和接收

公共content provide:

(1)返回result时不放置敏感信息

(2)设置exported为true

(3) 接收输入条件时小心

合作content provide:

(1)在代码中对使用方的包名和签名做检验操作

(2)设置exported为true

(3) 接收处理敏感信息时小心

(4)确认可以公开合作伙伴的信息才做返回

内部content provide:

(1)定义一个signature的permission

(2)设置该content provide需要此permission

(3) 设置exported属性为true

(4) 代码内部检测传入应用的签名和包名的合法性

(5)传入的参数信息与返回信息注意敏感数据泄露

部分content provide:

(1)2.2之前的版本别使用

(2)设置exported为false

(3) 指定允许访问的uri权限授予临时路径

(4)处理接收到的请求数据和安全,即使已经获得应用程序的监视授权

(5)返回数据时只返回部分开放的内容

(6)给予指定的uri的intent临时访问权限

原文地址:https://www.cnblogs.com/miaohj/p/5951125.html