-1

这句话是什么意思:

验证参数值是否在其预期范围和类型内。不输出调试错误信息和异常

这是在我的申请的审核报告中。这里的参数是认证模块的用户名和密码

推理:应用程序已响应错误消息,指示可能暴露敏感信息的未定义状态。

4

2 回答 2

1

当认证失败时,您不能向用户提供任何信息。

不得

  • 指示登录是否不存在(或者我可以使用蛮力列出用户)。
  • 指出密码是否错误(或者我可以猜测用户存在并列出它们)。
  • 指示帐户是否已被停用(让黑客松手)。
  • 在日志中打印错误的密码(因为某些真正的用户在输入密码时会失败,并且它会让一些接近的密码出现在日志文件中)
  • 打印真实密码,无论是否经过散列/加密。
  • 打印与密码相关联的任何内容。

总是返回“不正确的登录名或密码”。

另请注意:许多开发人员将密码存储在字符串中,这是一个非常糟糕的主意,因为您无权访问字符串生命周期。这意味着密码仍然存在于 JVM 中的某个位置。更喜欢将它们存储在 char[] 中并尽快清除它。

这也意味着您不能打印任何允许在 JVM 中找到代表用户的对象的内容。

于 2013-09-12T15:03:12.887 回答
0

范围和类型:表明您应该检查字符串长度、允许的字符序列、数据类型(如果尚未完成),通常在身份验证期间,一个应该只指示用户名/密码可能是错误的,而不是指示哪个。任何其他信息,可能会提供对您的身份验证机制的洞察力,它如何针对特定输入类型失败并可能被滥用。

于 2013-09-12T14:59:42.193 回答