security - 当散列不适用时将密码存储在数据库中

标签 security passwords password-encryption

Stack Overflow 上有很多关于如何存储用户密码的问题,当然一般建议是对密码进行哈希处理并比较哈希值。

但是,假设您正在构建一个收缩包装 Intranet 应用程序(例如 SharePoint),人们可以将其部署在自己的环境中。假设它需要用户名/密码组合才能通过 HTTP 访问外部服务(不支持依赖 API key 或联合安全性的解决方案)。

在这种情况下,我们无法对密码进行哈希处理,因为我们需要将原始密码传递给我们调用的 Web 服务。加密将是第二好的解决方案,但是我们将使用什么作为加密 key 呢?如果攻击破坏了数据库,他们可能首先可以访问用于加密数据的任何 key ?

如果您确实需要获取所存储密码的纯文本版本,您将如何以最安全的方式解决该问题?

最佳答案

这实际上是一个非常有趣的问题。我也来参加。

存储时应加密。不管你怎么看,它都比以纯文本形式存储要好。假设攻击者发现 SQL 注入(inject)广告转储数据库,但他仍然不持有加密 key 。另一方面,如果他能够访问服务器,他可能也会找到加密 key 。

为了改进它,您可以将加密 key 存储在服务器配置中。假设您使用的是 Apache,则可以使用 SetEnv .

在我的环境中,Apache 启动时需要输入加密 key ,然后将其存储为 en 环境变量,因此该 key 实际上并未存储在我的服务器上的任何位置。

没有办法,除非你要求用户输入 key 来解密密码,否则你将100%安全。

关于security - 当散列不适用时将密码存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8674182/

相关文章:

php - 如何在 PHP 中复制 django 密码验证功能?

mysql - 本地主机(使用 xampp)连接到远程数据库?

regex - 使用组合正则表达式进行密码检查

batch-file - 如何在批处理文件中加密密码?

c# - 在 php 中传输用户密码的安全方法

django - 尝试使用 Redis 和随机 token 实现无密码身份验证

security - Paypal Express Checkout API 与网站的 PayPal 按钮

c# - C# 中的哈希摘要/数组比较

security - Exchange 2010 中间人攻击

java - 恢复加密代理 key