【问题标题】:Storing the OAuth credentials from DropBox securely in a Database for later use将来自 DropBox 的 OAuth 凭据安全地存储在数据库中以供以后使用
【发布时间】:2012-04-26 10:34:56
【问题描述】:

我正在构建一个 Web 应用程序,它将使用 DropBox API 将数据保存到用户文件夹。该站点有 2 个部分:一个 ASP.NET MVC 前端和一个 Windows 服务。目前,我正计划将授权请求中的 oauth 字符串和用户 ID 转储到数据库,并在服务和网站调用中使用,但我应该如何存储这些信息?我应该加密还是不加密?如果是这样,有什么建议吗?例如,如果数据库是加密的,我如何存储加密密钥?

【问题讨论】:

    标签: security encryption oauth dropbox-api


    【解决方案1】:

    您想始终访问用户的投递箱帐户还是仅在他们登录到您的系统时访问?我假设是前者,因为您想存储 o-auth 令牌。在这种情况下,请参阅下面的加密讨论,了解为什么您不能真正加密它。但是,我建议您采取更安全的路线,并且仅在用户登录时或之后不久访问下拉框(即不存储持久性身份验证令牌)

    安全方法

    当用户登录时,从保管箱中获取一个 oauth 令牌,使用它来执行他们想要的任何操作,并在必要时在注销后保留它以继续执行任务(后台同步或其他东西)。但是,一旦最后一个任务完成,请删除该令牌。这意味着,如果您的服务器受到威胁,则只有登录用户或最近注销的用户会被暴露。这是一种缓解,但它是你能得到的最好的。

    我相信您可以使用 o-auth 执行此操作,而无需每次都明确提示用户输入新令牌。如果没有,我知道你可以使用 opendID 来完成,尽管我可以看到 drop box 不允许这样做。

    最后,如果这些都不起作用,您可以将 o-auth 密钥永久加密存储在从用户密码派生的密钥下,例如 PBKDF2(大约 5000 次迭代)。当他们登录时,你解密它,使用它,然后删除明文副本。这样做的缺点是 1) 密码重置需要一个新的 o-auth 令牌,因为您不再拥有他们的密钥;2) 用户必须自己登录到您的站点并给您一个密码,以便您可以派生密钥。他们不能使用 openid。

    加密

    如果您希望持续访问 oauth 令牌,则无法真正进行有意义的加密。如您所说,您将密钥存储在哪里?对于 Web 服务,没有好的答案。对于最终用户系统,答案是从您不得存储的用户密码中获取密钥(这是 lastpass 所做的)。您不能这样做,因为您希望即使最终(wepapp)用户未登录也能访问数据。

    好的,系统管理员的密码呢?好吧,由于服务器一直在运行,这是毫无价值的,因为妥协仍然会泄露密钥。更糟糕的是,重新启动会导致您的应用停止运行,因为它需要系统管理员的密码才能解密其数据,而且当系统在凌晨 3 点崩溃时,它们不太可能是他们的。

    他们制作了Hardware Security Modules 来存储密钥并使用它们执行加密操作,因此攻击者可以获得密钥,因为它永远不会离开 HSM。但是,攻击者可以只要求 TPM 解密 o-auth 字符串。你能做的最好的就是限制这个速率,这样一次攻击每小时只能获得 1000 个令牌(显然这个速率需要大于合法使用)。鉴于 HSM 很昂贵,并且由于您需要专用系统而使托管变得昂贵,因此这是不值得的。

    在理想情况下,您会使用TPM 来保存密钥,并让它仅在系统未受到威胁时才释放数据。不幸的是,TPM 目前只支持验证是否加载了正确的程序(例如引导加载程序,然后是内核,然后是用户空间程序)。如果该程序在加载后受到威胁,他们什么也不做,这就是这里的威胁向量。这可能会在未来 5 到 10 年内发生变化,但现在对您没有帮助。

    【讨论】:

    • 感谢您的回复……这让我想了很多。我正在处理的项目需要对保管箱文件夹(不是整个站点)的权限,并且需要能够使用 Windows 服务对其进行写入...仅将密码存储一小段时间对我来说不起作用。硬件加密也不是一种选择,因为即使这是在专用服务器上,它实际上也是一个托管该站点的虚拟机……我想知道,像“如果这样然后那样”这样的站点是如何做到的?他们有权将东西放入我的 Dropbox... 我是不是想多了?
    • 对于这种事情,答案通常是不要被拥有。静态数据加密,这是您明智地想要使用的,并未广泛用于云服务,并且在大多数情况下,这是有充分理由的:您无法存储比您的位置更安全的密钥材料首先存储数据。 Dropbox 能否为您提供对特定文件夹的精细权限?我记得读过谷歌驱动器可以并认为他们从保管箱中克隆了该功能。如果是这样,那至少可以降低风险
    • 是的,Dropbox 可以提供精细的权限,这是我目前正在使用的(仅访问一个文件夹,特定于应用程序)。我想我唯一能做的就是尽我所能加密并尽可能多地锁定......除非来自 IFTTT 或其他地方使用 dropbox auth 的人在接下来的几天内返回他们的工作方式,我会接受这个答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2021-09-20
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    相关资源
    最近更新 更多