这个问题是关于 Greasemonkey 拦截密码的漏洞,对吧?
在这种情况下,SSL无法防止用户凭据被盗,密码(或哈希,或其他)将直接从用户的浏览器获取并通过GM_xmlhttpRequest()传输给坏人。
如果您尝试对密码进行编码或散列,在客户端,Greasemonkey 可以拦截甚至替换负责的 JS。
请参阅“网站可以知道我是否正在运行用户脚本吗?” ,你可以让脚本编写者更难,但最终,如果坏人可以让用户安装 Greasemonkey 脚本(或更糟糕的是,一个完整的附加组件/扩展),那么你只能让它变得更难 - - 并非不可能 - 用户的帐户被盗用。
除非/除非您有证据表明正在使用恶意脚本或附加组件,否则我什至不会担心它。最终,用户有责任确保其浏览器和客户端交互的安全。
您可以做的事情使脚本编写者更难(并非不可能):
- 监视您的日志,检查异常活动(无论如何都应该这样做)。
- 采取一般保护措施以防止机器人攻击,请参阅“当机器人攻击时!” , 例如。
- 如果检测到实际脚本或策略,则 警告用户。
- 监控用户的帐户/操作是否有异常活动。
- 您可以使用 JS 和一次性编码方式截取输入的密码。这将过滤掉因果脚本而不是确定的脚本。请注意,我不建议这样做,只是为了完整性而将其包括在内。
- 将密码条目放在 Flash 对话框中。Pure Greasemonkey 很难与 Flash 交互。同样,我不认为这是具有成本效益的,但为了完整性而将其包括在内。
- 合法用户不需要任何更繁琐的步骤(一次性密码、第三通道身份验证等)。这只会惹恼那些永远爱你的受害者,直到他们找到更好的替代方案或解决方法(他们会这样做)。