【问题标题】:Best practices for safe password sending between sql and web app?sql 和 web 应用程序之间安全密码发送的最佳实践?
【发布时间】:2013-01-15 11:08:44
【问题描述】:

我有一个关于在 C# 和 SQL 之间使用盐进行 SHA512 散列的问题。存储哈希的最佳方法是什么,我可以在从网络应用程序将它们保存到数据库后正常吗?当用户登录以验证用户时,以后获取它们是否安全?我可以在 SQL 中创建用户和密码,哈希密码并添加盐,然后使用相同的算法在 c# 哈希中验证用户,按其大小删除盐并比较两个哈希?

【问题讨论】:

  • 您希望保护哪一部分? HTTPS 将保护客户端和服务器之间的“纯文本”密码..您的服务器端代码进行哈希处理..数据库存储哈希值..这是我能想到的唯一弱点..我不确定你具体问的是什么..
  • 是的,我明白了,但我正在尝试找到方法让 sql 数据库中的用户根据活动目录中的密码对他们的密码进行哈希处理,但是当用户登录网络时,根据哈希验证其输入值sql db中的值,我想我需要再次哈希密码以查看是否相等。不知道有没有可能?

标签: c# web-applications passwords security


【解决方案1】:

这是一个非常复杂的话题,你真的应该确保你做对了——大多数人都没有。

我见过的最全面的指南是 Les Hazlewood 的 How to Secure Passwords - Developer Best Practices 演讲,这是我推荐的一个好的开始。

如果不写一本短书,这里没有人能够回答您的所有问题,所以我只能建议观看此演讲,记下所解释的问题、解决方案、工具和技术,然后查找有关它们的更多信息。

或者您也可以将您的用户处理外包给一些正确执行此操作的公司,例如 Stormpath。您也可以使用OpenIDBrowserID,而根本不关心密码。 (虽然我现在不建议使用 BrowserID,至少在可以可靠地验证您自己的服务器上的断言之前不要使用。)

【讨论】:

    【解决方案2】:

    存储哈希的最佳方法是什么,我可以在从网络应用程序将它们保存到数据库后正常吗?以后用户登录验证用户时获取它们是否安全?

    如果您使用的是正确的方法,那么如果您碰巧将所有哈希值转储到了 pastebin 上,则不会发生任何事情;由于盐(最好是胡椒),没有人可以对您的哈希做任何事情(因为他们没有无限的时间和计算能力)。

    所以是的,您应该简单地将散列存储在适当类型的数据库列中。然后在登录时,重新对输入的明文密码进行哈希处理,并将其与存储在数据库中的密码进行比较。

    【讨论】:

    • 谢谢,但是如果我想在 SQL 中而不是在 Web 应用程序 (C#) 中创建用户怎么办。我知道使用相同的等 SHA 可以让我验证输入的值是否与 db 中的哈希值相同,但是盐呢?也许,我刚刚想到,如果我知道盐的长度,我可以在从 SQL 中提取数据后删除 C# 中的盐并将其与散列输入进行比较?
    • “如果我知道盐的长度,我可以在从 SQL 中提取数据后删除 C# 中的盐并将其与散列输入进行比较?” - 不。
    • 所以我无法在 SQL 中创建用户并在此处验证他们,在 C# 中以这种方式?
    • @djedjica 我没有这么说。您只是无法从散列中提取原始值,因此如果您没有其他数据,则无法将未加盐的散列与加盐的散列进行比较。请解释您正在尝试做什么,不要解释您认为解决方案是什么。
    • 我考虑过在加盐之前在网络应用程序中比较它们,所以加盐只会发生在 sql 上,因此加盐的哈希将传输到我的应用程序,然后它会删除盐,而不是将哈希与散列进行比较(但不是salted) 在密码框中输入。我正在尝试找到在 sql 中创建用户、散列和加盐密码的方法,另一方面,当用户登录时,通过用户名从 sql 中提取数据并使用用户提供的密码进行验证。所以之间不会发送纯文本或未加盐的哈希。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2020-05-18
    相关资源
    最近更新 更多