公开"IdentityError"类中的消息可以吗



我对asp.net核心身份框架还很陌生。许多教程、文章和指南似乎都以相同的方式处理IdentityError。它们向用户公开错误的描述,即将错误的描述添加到ModelState中。

我一直在想,向用户暴露错误是一个可怕的想法,因为它会增强攻击者的能力。

所以我想,这一定取决于描述中提供了什么样的信息。例如,如果错误为"您的密码太弱"或"您需要输入有效的电子邮件地址"。这种类型的信息对用户来说是有价值的,应该可以显示。然而,"数据源响应时间太长"已经是太多的信息,提供的价值很小。我宁愿捕捉这种类型的错误,并将其替换为一些通用的500错误。

所以我的问题是:向用户显示原始身份错误是否安全?如果没有,我如何筛选我应该和不应该向用户显示的内容?

我试着查看MSDN文档,以了解我可能收到的所有代码。但这些文件提供的信息很少。

我专门与合作

var userCreationResult = await userManager.CreateAsync(newUser, password);

但它适用于任何可能出现IdentityError的实例。

许多软件质量和安全法规都对此有审计要求(向最终用户提供的错误消息中可能不包含机密信息,或者会让恶意用户破坏系统或访问敏感数据(,因此这是一个重要问题。如果有专门针对这一点的文档或文章,那么它是隐藏的。

IdentityError类的两个成员可以假设的可能值被烘焙到框架中。因此,看起来您可以确信它将始终是其中之一,除非您从UserManager以外的任何东西获得IdentityError的实例。

Code字段是从错误方法的nameof中分配的,相关的Description文本是从核心框架资源中读取的,因此这些文本将被本地化。

源代码
en-us描述

当前实现中的错误列表(3.0.0版(:

  • 默认错误
  • 并发故障
  • 密码不匹配
  • InvalidToken
  • RecoveryCodeRedemption失败
  • 已关联登录
  • 无效用户名
  • 无效电子邮件
  • 重复用户名
  • 重复电子邮件
  • 无效的角色名称
  • 重复文件名
  • 用户AlreadyHasPassword
  • 未启用用户锁定
  • 用户AlreadyInRole
  • UserNotInRole
  • 密码TooShort
  • 密码要求唯一字符
  • 密码要求非字母数字
  • 密码要求非字母数字
  • 密码要求更低
  • 密码要求上限

其中大多数都是静态字符串,不公开任何变量信息。

以下确实披露了可变信息。在前八种情况下,这是用户以前提供的数据,在后两种情况下是服务器配置属性的值,要求的最小密码长度和有效密码中要求的最小唯一字符数:

  • InvalidUserName:用户名
  • InvalidEmail:电子邮件地址
  • DuplicateUserName:用户名
  • DuplicateEmail:电子邮件地址
  • InvalidRoleName:角色的名称
  • DuplicateRoleName:角色的名称
  • UserAlreadyInRole:角色的名称
  • UserNotInRole:角色的名称
  • PasswordTooShort:最小密码长度
  • PasswordRequiresUniqueChars:所需的唯一字符数

如果这符合";"安全";在项目的约束和规范范围内,答案是肯定的。

关于如何做的第二个问题,您可以执行以下操作来筛选重复的用户名,当你循环通过错误

if (error.Code == _userManager.ErrorDescriber.DuplicateUserName(user.UserName).Code)
{
//Hide info to user by, e.g. redirecting to a page for a registration flow, or display an invalid login attempt for a login flow
}

相关内容

  • 没有找到相关文章

最新更新