Security 使用cookies在数据库中安全存储加密的第三方密码

Security 使用cookies在数据库中安全存储加密的第三方密码,security,cookies,encryption,Security,Cookies,Encryption,显然,存储任何类型的第三方凭据都是一个重大风险,我希望尽可能避免它。然而,我有一个关于如何相对安全的想法,我想听听关于这个策略的一些意见: MySite允许用户注册用户名和密码(或Facebook,随便什么) 如果该用户还使用用户名和密码在AllTheData.com(此处称为ATD)网站上注册,他们可以通过HTTPS向我提供用户名和密码 MySite接收ATD的第三方凭据,并执行两项操作:创建一个新的加密密钥,将其存储在用户的cookie中,然后使用该密钥加密用户名和密码,并将这些加密值存储在

显然,存储任何类型的第三方凭据都是一个重大风险,我希望尽可能避免它。然而,我有一个关于如何相对安全的想法,我想听听关于这个策略的一些意见:

  • MySite允许用户注册用户名和密码(或Facebook,随便什么)

  • 如果该用户还使用用户名和密码在AllTheData.com(此处称为ATD)网站上注册,他们可以通过HTTPS向我提供用户名和密码

  • MySite接收ATD的第三方凭据,并执行两项操作:创建一个新的加密密钥,将其存储在用户的cookie中,然后使用该密钥加密用户名和密码,并将这些加密值存储在数据库中

  • 所有Data.com的数据库可能如下所示:

    | User | Password | JohnDoe@gmail.com | p4ssw0rd_hashed |用户|密码 | JohnDoe@gmail.com| p4ssw0rd|散列 MySite的数据库现在如下所示:

    | User | Password | ATD_username |ATD_pass | JohnDoe@gmail.com | another_p4ssw0rd_hashed| ct5lHMGymedITfElVA...|BHJCS38DkG7Zg0... |用户|密码| ATD|U用户名| ATD|U通行证 | JohnDoe@gmail.com|另一个|p4ssw0rd|ct5lhmgyeditfelva|BHJCS38DkG7Zg0|。。。 并且用户的浏览器有一个带有密钥的cookie:

    MySite_key: E3iKZxk2ZDD4EUb*fH$X6Mz5BO^iQeOM&V$lB0WAk4&WAB#A4QB8Yn7 我的网站密钥:E3iKZxk2ZDD4EUb*fH$X6Mz5BO^iQeOM&V$lB0WAk4&WAB#A4QB8Yn7 现在,当我需要访问服务时,我从数据库中取出加密的值,然后从他们的请求中取出cookie,我就可以访问服务器了!当然,如果他们的cookie过期了,或者他们清除了cookie,或者更换了计算机或其他任何东西,那么我必须再次询问:(但如果这意味着我不必以普通方式存储凭据,这是值得的

    我有没有做错什么?这个计划有没有明显的问题


    谢谢!

    我同意CBroe的评论。与强迫用户放弃宝贵的凭据相比,有更好的方式与第三方进行交互。我建议您研究以下内容。它允许您的用户使用许多很棒的功能:

    • 他们只向ATD出示ATD证书
    • ATD可以让他们控制系统可以为他们执行的数据或操作。用户有权随时撤销系统的访问权限
    • 您希望与之集成的大多数大型第三方已经

    既然您已经声明OAuth不是一个选项,那么在使用您建议的解决方案之前,我会再尝试一次攻击计划。您已经承认您的解决方案是非常短暂的;一旦用户清除了他们的cookie,您就要求他们再次登录。如果您调用的服务在登录时创建会话,您可以简单地转发t他将用户凭据发送给第三方,并临时缓存服务通常返回给用户的任何令牌或会话ID(我认为没有理由将其存储在数据库中)。然后,您可以在用户注销系统后删除该令牌。这使您无法直接存储他们的凭据。这并不是一个很大的进步,但这是我首先要做的

    如果将此与cookie加密思想结合起来,我认为会得到很好的分离。您在服务器上缓存了加密的身份验证令牌,但只有将加密密钥存储为cookie的用户才能访问它。正如您所说,这会阻止您的服务器在您受到威胁时向第三方提供访问权限.如果你的客户受到威胁,你实际上得不到任何保护,但我认为这是不可避免的


    如果系统需要为每个请求提供凭据,那么我真的看不到更好的方法。您已经完成了准备工作,我看不到任何更好的解决方案。

    我同意CBroe的评论。与第三方交互有比强迫您的用户放弃其宝贵凭据更好的方法。我建议您使用into类似于。它允许您的用户使用许多很棒的功能:

    • 他们只向ATD出示ATD证书
    • ATD可以让他们控制系统可以为他们执行的数据或操作。用户有权随时撤销系统的访问权限
    • 您希望与之集成的大多数大型第三方已经

    既然您已经声明OAuth不是一个选项,那么在使用您建议的解决方案之前,我会再尝试一次攻击计划。您已经承认您的解决方案是非常短暂的;一旦用户清除了他们的cookie,您就要求他们再次登录。如果您调用的服务在登录时创建会话,您可以简单地转发t他将用户凭据发送给第三方,并临时缓存服务通常返回给用户的任何令牌或会话ID(我认为没有理由将其存储在数据库中)。然后,您可以在用户注销系统后删除该令牌。这使您无法直接存储他们的凭据。这并不是一个很大的进步,但这是我首先要做的

    如果将此与cookie加密思想结合起来,我认为会得到很好的分离。您在服务器上缓存了加密的身份验证令牌,但只有将加密密钥存储为cookie的用户才能访问它。正如您所说,这会阻止您的服务器在您受到威胁时向第三方提供访问权限.如果你的客户受到威胁,你实际上得不到任何保护,但我认为这是不可避免的

    如果系统对每个请求都需要凭据,那么我真的看不到更好的方法。您已经完成了准备工作,我看不到任何更好的解决方案。

    这还不错,尽管不是允许访问第三方系统的最佳方法

    确保
    MySite\u密钥
    是由加密安全算法生成的,因此攻击者无法预测该密钥,并尽可能保护此cookie。如果您的站点上存在任何漏洞,则该cookie对攻击者来说非常有价值