帮我解决同事之间的讨论并指导未来的设计:
即使在高影响场景中:例如保护支付应用程序或政府网关,但在互联网可访问的应用程序中
是否值得实施以下任何(或其他)措施来保护用户名:
需要一个复杂的系统生成用户名,如英国政府网关或汇丰网上银行?用户忘记这一点、需要写下来、额外的呼叫中心流量、用户必须自助服务用户名提醒与使用公共用户名(如电子邮件地址或手机号码)的风险之间的权衡是否值得?
提供通用消息:“您的用户名或密码不正确”,而不是更加用户友好的“您的用户名未被识别”和“您的密码不正确”
使用以下类型的登录序列,其中使用站点密钥或用户选择个人密码来帮助识别网络钓鱼站点:
- 输入用户名和简单的秘密值(例如邮政编码)
- 如果无效,则会提供错误:用户名或值不正确
- 如果这些有效,则显示用户个人站点密钥图像并要求输入密码
- 如果密码无效,错误提示密码不正确
- 如果授予有效访问权限
与 Quora.com 上更友好的方式相反,您可以在正确的用户名输入上显示您的图片。这仅在低风险问答网站上可接受吗?
我的同事主张对用户名保密和上述类型措施:
- 大量用户名枚举允许您尝试对站点进行字典和暴力破解尝试
- 它使您能够通过锁定启用帐户锁定的所有帐户来执行站点
- 用户喜欢跨站点使用相同的用户名和密码,许多站点使用电子邮件地址和手机号码作为其站点。如果用户在站点之间共享凭据,则凭据可能会从其他站点被窃取或钓鱼,然后用于访问您的站点
- 众所周知的事实,例如移动和电子邮件,不计入身份验证强度。如果用户名是一个已知事实,为了保持相同的安全级别,密码必须显着增强以弥补统计差异,例如如果用户名和密码都至少有 6 个字符,那么假设 52 个可能的字符我们有 52^12 个组合. 但是,如果用户名是一个已知事实,那么它就变成了 52^6 个组合;您必须将密码增加到最少 12 个字符才能获得相同级别的保护 - 不这样做会增加帐户接管风险。
我为每个反击:
- 您对此的真正控制是密码长度、复杂性和帐户锁定策略
- 您可以通过在一段时间后(例如 5 - 30 分钟)后自动解锁、具有大规模解锁功能、在多次错误尝试后在一段时间内进行指数回退或 IP 禁止、选择性反自动化来缓解这种情况在多次尝试失败后显示的控件(例如验证码、Roboo 脚本)
- 用户教育、第二个身份验证因素、自适应身份验证(例如,基于设备 ID、位置等的升级或分级身份验证)将是更好的防御措施
- 我将用户名视为身份,将密码视为身份验证。如果您想要更强大的身份验证,请延长密码或需要 2 个密码 - 不理会身份验证
很高兴学习和改变我的立场。提前致谢。