android.net.conn.CONNECTIVITY_CHANGE 的广播者权限
Posted
技术标签:
【中文标题】android.net.conn.CONNECTIVITY_CHANGE 的广播者权限【英文标题】:broadcaster permission for android.net.conn.CONNECTIVITY_CHANGE 【发布时间】:2016-09-06 02:42:14 【问题描述】:我最近使用 HPFortify 服务对我的 android 源代码进行了代码扫描。他们报告了有关其中一个广播接收器的安全漏洞。他们建议使用广播公司的权限来减少攻击向量。这样你就限制了广播器,否则任何恶意应用程序都可以发送意图,广播接收器将处理它。
这是我的实际代码:
<receiver
android:name="com.xyz.core.util.ConnectionChangeReceiver"
android:label="NetworkConnection">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
HPfortify 建议我应该使用这样的东西:
<receiver
android:name="com.xyz.core.util.ConnectionChangeReceiver"
android:permission="SOME-PERMISSION"
android:label="NetworkConnection">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
我尝试查看源代码和文档,但找不到正确的广播公司权限。
【问题讨论】:
【参考方案1】:您可以创建自己的权限,这使得除非呼叫者具有相同的权限,否则无法呼叫您的接收者。这对于协作应用程序很有用。
以下是 Android Manifest 中权限标签的说明: http://developer.android.com/guide/topics/manifest/permission-element.html
你可以做的是这样的:
<permission
android:name="com.xyz.permission.YOUR_PERMISSION"
android:protectionLevel="normal" />
<uses-permission
android:name="com.xyz.permission.YOUR_PERMISSION" />
<receiver
android:name="com.xyz.core.util.ConnectionChangeReceiver"
android:permission="com.xyz.permission.YOUR_PERMISSION"
android:label="NetworkConnection">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
【讨论】:
感谢您提供答案。android.net.con.CONNECTIVITY_CHANGE
是系统发送的,所以这个权限的东西不会起作用,因为系统没有相同的权限吗?
如果你使用signatureOrSystem
作为protectionLevel
,它应该可以工作。
我会用那个。我还想将导出的值用作false
。我用过类似的广播接收器,它确实有效。这也是减少附加向量的另一种方法。
我怀疑这是否适用于系统触发的接收器。导出的默认值为true
是有原因的。据我所知,如果您将其设置为 false
,那么除了您自己的应用程序之外,没有其他东西可以触发它。
我用其中一个广播接收器android.intent.action.MY_PACKAGE_REPLACED
对其进行了测试,它确实有效。我不确定它是如何实现的,但我可以尝试使用其他广播接收器。以上是关于android.net.conn.CONNECTIVITY_CHANGE 的广播者权限的主要内容,如果未能解决你的问题,请参考以下文章