【问题标题】:Exported content providers can provide access to potentially sensitive data导出的内容提供者可以提供对潜在敏感数据的访问
【发布时间】:2014-05-06 10:53:35
【问题描述】:

我在我的 android 应用程序中使用 ContentProvider 在应用程序之间共享数据库。为了共享数据库,我需要在AndroidManifest.xml 中添加提供者访问权限,如下所示:

<provider
android:name="Contentprovider"
android:authorities="umb.con.apps.vid" />

我已成功添加并实施,但&lt;provider/&gt; 标记中显示的警告消息类似于“导出的内容提供程序可以提供对潜在敏感数据的访问”。以后会不会造成安全问题?

【问题讨论】:

    标签: android android-contentprovider


    【解决方案1】:

    如果您只想从应用内部访问内容提供程序,只需添加

    android:exported="false"
    

    进入清单中的节点。

    来自doc

    false:提供程序不可用于其他应用程序。设置 android:exported="false" 以限制对您的应用程序提供程序的访问。只有与提供者具有相同用户 ID (UID) 的应用程序才能访问它。

    另一方面,如果您确实希望将数据暴露给其他应用您的数据存储中也有敏感数据,请记住您可以拥有多个内容提供商,因此只公开“公开”的。

    【讨论】:

    • 另请注意,如果您的目标是 4.2(API 级别 17),则这是默认设置。
    • 如果您不希望提供商将数据暴露给任何其他应用程序,您究竟如何才能摆脱警告?
    • @pat8719 tools:ignore="ExportedContentProvider" in manifest xml
    • 这样做(android:exported="false"),我们可以在 App Widget 中使用它吗?
    • 如果你添加 tools:ignore,记得在 manifest 标签中添加 xmlns:tools="schemas.android.com/tools"。我花了一个小时才弄清楚为什么 tools:ignore 会破坏清单文件。
    【解决方案2】:

    此外,如果您确定要允许外部访问您的内容提供商并消除警告,请添加 tools:ignore="ExportedContentProvider"

    例如

    <provider
    tools:ignore="ExportedContentProvider"
    android:exported="true"
    android:name="Contentprovider"
    android:authorities="umb.con.apps.vid" />
    

    【讨论】:

    • 确保在您的manifest 标签中包含tools 的XML 命名空间前缀:&lt;manifest ... xmlns:tools="http://schemas.android.com/tools" ...&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多