我想知道在其他字段未验证时是否应该重新填充表单中的(屏蔽的)密码字段。我在网上看到过两种形式:
你的最佳做法是什么?重新填充密码字段是否表示安全漏洞?可用性方面我更愿意重新填充该字段,而不是让用户重新输入它。
答案 0 :(得分:10)
如果您想这样做,一个选项实际上并不是发送密码纯文本,而是随机令牌。由于它是密码字段,因此用户将无法分辨(除了长度)。然后,将哈希密码和令牌存储在会话中。当用户提交表单时,如果密码字段与存储的令牌相同,请使用存储的密码哈希。否则使用提交的密码。这解决了缓存问题(因为随机令牌在其他会话的请求中没有意义)。这样,您无需在初始表单提交后存储或传输原始密码...
答案 1 :(得分:2)
重新填充它对用户来说更舒服。
但是,如果表单是以经典方式提交的(即完整页面重新加载,而不是通过AJAX),则可能会导致包含密码的html被缓存。使用正确的标题,您可以降低/消除风险。在这种情况下,使用HTTP也非常重要。它完全阻止HTTP代理缓存它,本地浏览器缓存通常会尊重nocache头(即使不是,如果在本地计算机上发生缓存也不是一个大问题。)
总而言之,我通常不需要再次输入密码只是因为另一个字段(例如蹩脚的验证码)不正确..但在高安全性环境中,您不想重新填充密码字段除非您使用的是AJAX,否则无需实际发回输入的密码。
答案 2 :(得分:0)
当然,请清除您的密码字段,不要重新填充它们。不要为了可用性而牺牲安全性。
答案 3 :(得分:0)
这是共享计算机上的安全问题,因为在查看html源时,密码将以明文形式显示。不仅在活动的浏览器窗口中,而且在任何基于磁盘的缓存中。
我个人会使用OpenID,而不是要求用户发明另一个用户名+密码对来记住(这也会影响可用性)。
答案 4 :(得分:0)
如果您需要将实际密码(或从中获取的任何密码)从服务器发送到客户端以重新填充它,那么这是一个主要的安全漏洞。
如果您只是在客户端本地保存密码,直到表单提交验证(通过不重新加载页面,例如通过javascript),那么对我来说似乎没问题。
答案 5 :(得分:0)
不,它不会(如果做得对)。
Cache-Control
标头以防止缓存该页面。