我正在尝试扩展我的应用程序以支持WebAuthn登录。到目前为止,我已经成功地设置了一个测试应用程序(使用https://github.com/lbuchs/WebAuthnPHP实现(。
我想我现在基本上理解了这个过程,但我有一个安全问题:当你使用WebAuthn作为唯一的身份验证因素(这应该是可能的(时,用户只输入他想要的用户名,并通过指纹或YubiKey或其他方式提供凭据。在该图中(https://developers.yubico.com/WebAuthn/Libraries/Using_a_library.html),据说服务器返回与用户名相关联的凭证ID的列表。然后,验证器回答它拥有私钥的质询。
我的问题是:如果攻击者想找出存在哪些用户名,他可以尝试提供不同的用户名,并测试服务器是否返回任何credentialId。这不是安全问题吗?通常,攻击者不应该从失败的登录尝试中获得任何信息。
正如本文所述,只要浏览器和FIDO2硬件广泛支持,"常驻凭据"就会使其成为可能。
同时,您可以将用户ID存储在长期cookie或浏览器(localStorage
API(中。最好您应该存储不透明的标识符,因为有泄漏的风险。不幸的是,数据可能会从浏览器中清除(用户操作、浏览器更新…(,并且不如常驻凭据持久。