当不存在身份验证 API 时,如何安全地将用户的凭据存储到第三方网站?

Jos*_*eph 5 python security encryption django postgresql

我正在开发一款网络应用程序,该应用程序依赖于一个或多个第三方网站的数据。这些网站不提供任何类型的身份验证 API,因此我使用非官方 API 从第三方网站检索数据。

我计划要求用户提供第三方网站的凭据。我知道这需要用户信任我和我的工具,我打算通过尽可能安全地存储凭据并明确共享其凭据的风险来尊重这种信任。

我知道现在有一些流行的工具可以解决这个问题。例如,Mint.com 需要用户提供其财务帐户的凭据,以便定期检索交易信息。LinkedIn 要求用户提供电子邮件凭据,以便获取他们的联系人信息。

存储用户凭据的安全设计是什么?特别是,我正在编写一个 Django 应用程序,并且可能会构建在 PostgreSQL 后端之上,但我对其他想法持开放态度。

就其价值而言,从这些第三方网站访问的数据远不及财务帐户、电子邮件帐户或社交网络个人资料/帐户的水平。也就是说,我打算以最大的尊重对待这种访问,这就是为什么我首先在​​这里寻求帮助。

2ps*_*2ps 3

在存储密码/秘密时,\xe2\x80\x99 不存在安全设计之类的东西。只有\xe2\x80\x99s,您愿意接受多少安全开销权衡。以下是我认为您应该做的最低限度的事情:

\n\n
    \n
  1. 仅 HTTPS(所有密码应在传输过程中加密)
  2. \n
  3. 如果可能,在使用密码时,请在内存中对密码进行加密,除非您需要访问它们才能访问服务。
  4. \n
  5. 数据存储中的加密。所有密码都应在数据存储中进行严格加密。
  6. \n
  7. [可选,但强烈推荐] 客户密钥;客户应该掌握解锁其数据的钥匙,而不是您。这意味着您与第三方服务的通信只能在客户与您的应用程序交互时进行。密钥应在设定的时间后过期。这可以保护您免受流氓 DBA 的侵害或您的数据库受到损害。
  8. \n
  9. 而这才是最难的,审计。应记录对任何客户信息的所有访问,并且客户应能够查看日志以验证/审查活动。有些甚至在数据库级别启用此日志记录,以便记录数据库级别的所有行访问。
  10. \n
\n