security - 通过网络发送散列密码是否存在安全漏洞?

标签 security hash authentication passwords

我遇到了一家公司正在使用的系统,我们正在考虑与该公司合作开展一个中型(针对我们,而不是他们)项目。

他们有一个我们需要集成的网络服务。

我目前对正确的用户名/密码管理的理解是用户名可以以明文形式存储在数据库中。每个用户都应该有一个唯一的伪随机盐,它也可以以明文形式存储。密码文本必须与盐连接,然后可以对这个组合字符串进行哈希处理并将其存储在数据库中的 nvarchar 字段中。只要通过 SSL 将密码提交到网站(或网络服务),一切都应该很顺利。

如果我的理解有误,请随意批评我上面总结的理解。

无论如何,回到当前的主题。这个潜在合作伙伴运行的 WebService 不接受用户名和密码,这是我预料到的。相反,它接受两个名为“Username”和“PasswordHash”的字符串字段。我得到的“PasswordHash”值确实看起来像一个哈希值,而不仅仅是一个命名错误的密码字段的值。

这对我来说是一个危险信号。我不知道为什么,但由于某种原因,我对通过网络发送散列密码感到不舒服。我完全想不出为什么这会是一件坏事......从技术上讲,哈希值无论如何都可以在数据库上使用。但这让我感到紧张,我不确定这是否有原因,或者我只是偏执。

编辑

在我重新阅读我的帖子之前,我对下面的一些评论感到困惑。

在原文中,我有这样一句话:“只要通过明文将密码提交到网站(或网络服务),一切都应该很美好。”

我发誓,因为我认为我正在考虑“SSL”这个术语。由于某种原因,我输入了“纯文本”一词。哇。

最糟糕的。错字。曾经。

最佳答案

使用散列密码将其发送到服务没有任何值(value),因为您仍然需要单独的机制来保护通信,即 SSL

如果系统接受散列密码,则出于所有意图和目的,散列密码就是密码。如果攻击者获得哈希密码,他就可以访问该帐户,而无需找出原始密码。

上述所有问题的一个重要问题是,如果数据库遭到破坏并且攻击者获得了哈希密码,这意味着可以通过所述 WebService 即时访问所有帐户,因为就 WebService 而言,这些帐户已经是密码。

我真的建议你把它交给他们并讨论一下。这可能是某些开发人员所做的事情之一,但尚未获得关注/优先解决。

关于security - 通过网络发送散列密码是否存在安全漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2742749/

相关文章:

python - 在 selenium 中测试身份验证 UI

authentication - 安全性:通过 URL 强制执行 GET 请求?

javascript - JS从django模板标签获取数据

security - SPSecurity.RunWithElevatedPrivileges 在控制台应用程序中执行任何操作吗?

multithreading - 在Perl中使用多线程时,应如何更新哈希哈希?

algorithm - MySQL 的线性哈希算法的正确名称是什么?

data-structures - 为什么数据结构中不使用加密哈希函数?

node.js - 在 GraphQL 服务器中实现访问控制的好的模式是什么?

android - 在运行时检查应用程序发布签名——先有鸡还是先有蛋?

asp.net - ASP.net __EVENTTARGET 和 __EVENTARGUMENT 是否容易受到 SQL 注入(inject)的影响?