在启用2FA的许多站点中,登录流是:
但是,在某些实现中,验证代码会后缀到密码中,因此流只是一个请求username和password+verification_code的表单。
哪种方法提供了更好的安全性?
发布于 2020-06-04 16:41:32
让我们假设用户知道它的用户名、密码(当然),并且可以访问它的双因素身份验证(2FA)代码。
在服务器端,如果我们知道代码是整个字符串的最后6位数字,那么在相同的字段中让password+verification_code从对方提取密码和代码会带来轻微的开销。我们必须解密,拆分,对照数据库检查,然后允许用户。但我确实看到了这一点的好处,跳过了一跳的用户交互和连接。这意味着将认证期和通信时间缩短到接近一半。
对我来说,这对最终用户来说是一种方便,他们对方便有什么看法呢?尤其是在安全问题上。方便会增加风险。
哪种方法提供了更好的安全性?
当涉及到两个单独的表单,一个用于用户名/密码,另一个用于2FA代码时,这本身就提供了隔离,这是两种不同形式之间的一条不同的界线,用于不同的用途。在这一领域中,隔离是非常重要的。
在成功的凭据为POSTed时,提供不同会话或唯一令牌的实现是很好的实践。这就引出了下一步,一个新的页面/表单,它提示用户输入2FA代码。这个实践就是要分别发送两条密钥信息,一条是你知道的东西,比如你的用户名/密码,另一条是你拥有的东西,比如一个2FA物理令牌或者一个认证程序。
发布于 2020-06-04 22:38:34
我不认为从您的示例中实现2fa的方式在安全性方面没有明显的差别。
在这两种情况下,服务器都接收用户名、密码和唯一的2fa令牌。在这两种情况下,攻击者都会发现如果没有2fa代码,就不可能使用被盗的密码并登录。
虽然单独使用2fa表单看起来很有吸引力,但它也存在一些缺陷,比如只有当用户名和密码组合正确时才会请求2fa令牌,这表明密码是否正确,这可能会帮助攻击者。但我离题了。
https://security.stackexchange.com/questions/232724
复制相似问题