作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我是一名优秀的程序员,十分优秀!