当前位置: 首页 > 知识库问答 >
问题:

密码身份验证的这种实现看起来安全吗?

糜昌胤
2023-03-14

我正在创建一个web应用程序,我需要安全地执行身份验证。阅读了大量的文章和帖子,我对实现得出了以下结论。

后端密码散列:使用PBKDF2,用另一个唯一的salt再次对#1的salted-hash进行散列,生成#2的salted-hash,然后用#2 salt存储在数据库中。

因此,数据库总共有#2 salted-html" target="_blank">hash、#1 salt和#2 salt。

因此,当授权发生时,将使用#1 salt对创建#1 salted-hash的纯文本密码进行散列。然后将其转到API进行授权,在那里我们从数据库中获得#2 salt以创建#2 salted-hash,然后将其与从数据库中获得的#2 salted-hash进行比较以进行授权。

对不起,如果这个问题似乎多余,但我找不到任何具体的实现的答案。如果有人能帮助我,那就太好了!

共有1个答案

江雅懿
2023-03-14

你看过信息安全堆栈交换了吗?例如。这个答案。

客户端密码散列通常被认为是无用和不必要的步骤,不会提高安全性。事实上,您的实现甚至可能有一个不必要的副作用,实际上降低了安全性:用户枚举

根据授权过程中第一步的实现方式,您可能容易受到用户枚举的攻击。如果在数据库中没有找到匹配的用户,我假设您不会发回#1 salt:

    null

它也以另一种方式工作:

  1. Anon尝试使用与数据库中的用户匹配的用户名/电子邮件登录
  2. 由于该用户确实存在,API会发回该用户的#1 salt
  3. Anon现在知道这个用户名/电子邮件有一个帐户

为了避免这种用户枚举,即使没有找到匹配的用户,您的API也应该发回一个#1 salt,更重要的是,它应该始终发送相同的salt来响应相同的用户名/电子邮件,否则可能会发生这种情况:

    null

为了解决这个问题,您必须想出一种方法,在多次尝试未知用户名/电子邮件时,总是发送回相同的salt。但它不应该对每个未知的用户都是同样的盐,要么要么anon会做出同样的推断。

总而言之,似乎是不必要的复杂。这可能是为什么客户端密码散列不被认为是一件好事情的原因之一。

 类似资料:
  • 我无法使用正确的详细信息登录,因为程序不断声明编码的密码看起来不像bcrypt。有人知道怎么解决这个吗?我正在使用JDBC身份验证。 我也有正确的数据库表,有足够的空间用于编码密码。我不确定哪里出了问题。 JSP表单: 安全配置: 登录控制器 我的数据库:这里

  • 问题内容: 在不使用CMS或繁重框架的情况下,对用户进行身份验证的最佳最新库/方法是什么? 响应中应包含关于您认为应被视为涉及用户身份验证的新PHP开发标准的建议。 问题答案: OpenID是一种基于用户在常见网络服务(例如Yahoo,Google和Flickr)上现有帐户进行身份验证的方法。 登录到您的站点是基于成功登录到远程站点。 您不需要存储敏感的用户信息或使用SSL来保护用户登录。 可以在

  • 我想解释一个认证流程,并希望你能回答,如果亚马逊认知的正确解决方案。 要求:对于每个登录(用户名/密码、Facebook、Google等),都应该有一个有效的用户池帐户。 Flow Facebook(不存在身份或用户池帐户)。 客户点击“使用Facebook登录”: 1) 调用GetOpenIdToken- 1a)同时,使用FB AccessToken从Facebook获取电子邮件地址 2)使用生

  • 我最近遵循了Spring boot安全中的身份验证和授权教程,我想我在谈到sql时迷路了。尽管它没有显示任何错误,即使我输入了正确的用户名和密码,它仍然显示错误的凭据。这是我的代码: UserDetailsServiceImpl.java WebUserMapper.java WebSecurityConfig.java 这是我的数据库: 它返回以下错误: 密码是123。我不知道为什么它不工作,即

  • 问题内容: 背景: 我正在为REST Web服务设计身份验证方案。这并不是“真正”需要安全的(它更多是一个个人项目),但我想使其与练习/学习经验一样安全。我不想使用SSL,因为我不想麻烦,而在大多数情况下,它不需要设置它。 要解决这个问题: S3和OAuth都依赖于对请求URL以及一些选定的标头进行签名。他们都没有在POST或PUT请求的请求主体上签名。这难道不容易受到中间人攻击,这种中间人攻击会

  • 我用Spring Security做了一个概念验证,以便使用PRE_AUTH_FILTER过滤器执行预认证。它工作正常,但我想知道如果这个过滤器不起作用,我是否可以重定向到登录页面,因为我得到HTTP 403。< br >我的意思是,如果初始请求的头中不包含SM_USER字段,我如何重定向到登录页面?我需要考虑这两种情况(当它包含字段- SM_USER -和不包含时),但我无法让它工作。有什么想法