【问题标题】:What would be the best way of storing a password in SQL that needs to eventually be in plain text?在最终需要以纯文本形式存储的 SQL 中存储密码的最佳方法是什么?
【发布时间】:2023-03-06 09:40:01
【问题描述】:

对于用户密码,我们应该始终对其进行哈希和加盐,然后将哈希和加盐存储在数据库中。但是存储最终需要以纯文本形式存储的密码的最佳做法是什么?我不习惯在 SQL 中存储纯文本密码,但我必须将密码发送到库,以便它可以访问某些内容。

我的想法是我可以在数据库服务器上存储一个加密的密码,然后在 Web 服务器上解密。如果两者都受到损害,我就完蛋了。但如果只有一个被泄露,加密给了我足够的时间来更改密码。

大家觉得呢?

【问题讨论】:

  • 听起来库设计一开始就有缺陷。它没有任何基于访问令牌的身份验证或类似的选项吗?
  • @JonSkeet 该库只是使用密码连接到 FTP 服务器。
  • @MehmetDursunInce 我没有遇到过这个。但我现在会检查一下。谢谢!

标签: c# sql sql-server security


【解决方案1】:

为了更安全,只需对密码进行哈希处理并保存,然后您可以在需要进行身份验证时将用户密码输入与数据库中的哈希码进行比较。

【讨论】:

  • 用户永远不会输入密码。它被发送到 FTP 服务器以连接到它。
【解决方案2】:

如果您确实需要获取纯文本形式的密码(这确实不是一个好主意),您可以使用对称加密来保护用户密码。但是你必须弄清楚如何保证私钥的安全。我的意思是您的代码中需要一个私钥才能解密数据。此外,您的所有开发人员都可以访问私钥,这意味着他们也可以访问纯文本。

另外我建议你阅读这篇文章。它正在比较散列和加密用户密码。 http://www.darkreading.com/safely-storing-user-passwords-hashing-vs-encrypting/a/d-id/1269374

【讨论】:

    【解决方案3】:

    Microsoft 为该用例提供 API 作为 Crypto API 的一部分。它不是特别容易使用,但比将密钥存储在文本文件或数据库中提供了更好的安全性。

    可以公平地假设,如果攻击者可以进入您的数据库服务器,他们就可以访问您环境中的每个系统;即使您认为您有“时间更改密码”,您怎么知道您的系统已被入侵?大多数攻击直到很久很久以后才被注意到......

    【讨论】:

      猜你喜欢
      • 2011-12-23
      • 2018-08-21
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      相关资源
      最近更新 更多