为了安全起见,当前应用程序中的日志记录不存储传递给登录方法或密码重置方法的参数。日志调用具有一个可选参数来控制此参数,将其设置为true时,会将其替换为存储的参数对象[Redacted]
。当然,所以我错过了一些数据,但是我有他们的IP地址,所以我不愿意冒用明文形式获取敏感内容的风险。
如果您确实想记录这种情况,建议您在记录登录尝试时,检查数据库中是否有名称与用户名字段中的名称匹配的用户,并且仅在匹配时才进行存储。否则,您只需将其存储为“未知用户”即可。您可能会花哨的,检查此值是否包含该值或其他值,但始终存在获得[User] [Password]和[UserPas] [sword]之类的组合的风险,在这种情况下,您可以检查IP并推断出您无意间将某人密码的开头存储在明文中。您可以将其扩展到不太可能但可能的[User] [Password]和[UserPassword] [??],在这种情况下,您可以看到“ UserPassword登录失败”,然后是“ User登录成功”并推论所有用户密码。通常,为了安全起见,除非登录成功,否则不要登录用户名。
编辑添加:
我认为,人们发布的用于登录失败的用户名的大多数参数可以通过其他方法更好地处理。
例如,有人说,当客户问“我为什么不能登录?”时,登录的用户名将允许您指出错别字。的确如此,但是不值得冒着捕获密码的风险。我可以通过在失败时将用户重定向回登录表单来完成此操作,突出显示用户名字段,并使用他们键入的内容重新填充它,以便他们自己查看。
另一个论点是,它可以让您识别黑客攻击的企图。针对一个用户名的一连串失败很可能是暴力破解密码的尝试。我可以通过在Users表上有一个“ BadLogins”列来完成此操作,每次登录失败并使用与该用户名匹配的用户名时,该列都会增加,并在告诉用户“有x自您上次登录以来未成功进行登录尝试”,并就他们认为尝试失败的原因向他们提供建议。如果您想真正做到透彻,则可以有另一列即使在成功登录后也存储BadLogins列的最后一个值,和/或一列存储该列的最高值,和/或一列存储此帐户曾经有过的失败登录总数。