【发布时间】:2013-03-21 12:35:51
【问题描述】:
我们使用 SHA2 和以下盐对用户密码(在 .net Web 应用程序中)进行哈希处理:
- 应用程序 salt - 存储在数据库之外(在我们的例子中,Web 应用程序 web.config 作为加密字符串) - 这被传递给涉及登录、创建新用户和更改密码等的存储过程.
-
Per user salt - SQL 唯一标识符 - 当前存储在用户表中 - 在插入时使用默认
(CONVERT([char](36),newid(),(0)))自动生成 - 数据库加盐 - 存储在数据库设置表中的加盐。
- 密码 - 当然还有用户密码。
虽然这有助于彩虹和字典攻击等,但我在想如果有人确实发现我们的安全漏洞并设法对数据库运行更新语句会发生什么 - 特别是 - 什么会阻止用户注册我们的使用他们知道的密码的网站,然后用他们的 salt 和 hash 替换管理员帐户上的 salt 和 hash - 从而让他们拥有对我们网站/应用程序的完全管理员访问权限?
这是我们真正应该担心的风险吗?如果有,是否有技术术语/标准预防技术?
我正在考虑以某种方式将用户 ID(在我们的例子中是一个整数)包含在哈希中 - 只是好奇这方面的最佳实践是什么,或者我们是否在思考问题?
PS:我知道 SHA2 不是用于密码的理想哈希,并且首选 BCrypt 等较慢的哈希方法,这是我参与该项目之前做出的决定
PS:我们的 Web 应用程序(及其应用程序密钥)受到 SQL 服务器的严格防火墙 - 它们之间只有一个端口是开放的,并且用于 SQL)
【问题讨论】:
-
存储密码哈希的方式与 SQL 注入之间确实没有关系。使用加盐哈希的目的是使您的密码转储对攻击者无用。如果您允许攻击者执行任意 SQL,那么更改密码是您最不必担心的问题。
标签: security hash sql-server-2008-r2 passwords salt