【问题标题】:Are SqlCipher open cursors a security concern?SqlCipher 开放游标是否存在安全问题?
【发布时间】:2012-03-30 17:26:01
【问题描述】:

我将 SqlCipher 与内容提供程序一起使用。现在,当我想锁定应用程序时,我只需清除缓存的密码。但是,该应用程序可以继续使用任何打开的光标。这意味着重新打开应用程序会授予对敏感数据的访问权限。如果应用程序没有密码,我会通过重定向到登录屏幕来解决这个问题。

但是,我担心这些打开的游标是否存在任何安全问题,或者我是否应该继续阻止 UI 访问而不担心? SqlCipher 的文档说它动态读取/写入加密页面,而不是解密整个数据库,这让我认为打开的游标仍然是安全的。

这里的主要问题是有人丢失了他们的手机,然后知识渊博的人可以使用这些打开的游标来提取敏感数据。

【问题讨论】:

    标签: android sqlcipher


    【解决方案1】:

    我没有查看 SQLCipher for Android 游标实现的详细信息,但通常在 Android 中,游标将整个结果集保存在堆空间中,而在 SQLCipher 的情况下,届时将被解密。

    但是,由于这些游标是您的进程私有的,因此由于 Linux/Android 进程隔离,除了通过您的 UI 之外,任何人都没有很好的方法来获取它们。如果您的 UI 不允许任何人到达任何地方,除非再次登录,那么您就受到了很好的保护。问题在于您是否确定您的 UI 没有任何无意的代码路径会绕过登录(例如,最近的任务列表)并允许访问数据。

    【讨论】:

    • 关于无意的代码路径。我的第一次尝试是编写一个自定义 Activity 类,该类对所有可能的入口点(onCreate、newIntent 等)执行检查,然后扩展该安全 Activity 类。事实证明,这在理论上比在实践中要好。现在我只是覆盖每个活动类中的每个前面提到的入口点。不幸的是,这让我的应用程序充满了重复的代码。关于如何更好地实现这一目标的任何想法?每次应用程序被锁定时我都可以杀死活动堆栈,并且只在主要活动中执行检查?
    • @user1178479:“我可以在每次锁定应用程序时终止 Activity 堆栈,只在 Main Activity 上执行检查?” -- 如果锁定应用程序是一些显式操作,您可以使用FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOP 作为Intent 标志来在您通过startActivity() 启动锁定活动时销毁所有其他活动。
    • 这很好,但是如果您的清单具有会启动另一个活动的意图过滤器(例如“action.view”),那么仍然可以绕过这种方法,这是您在第一篇文章中的观点.我想真正集中控制的唯一方法是创建一个看门人活动,除了在锁定时清除活动堆栈之外,所有意图都通过该活动。但这可能比它的价值更多,并且几乎会使清单变得无用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多