在密码模式下,是否有任何安全方法将值设置为文本框?
我有一个带密码文本框的自定义登录表单:
<asp:TextBox ID="tbPassword" runat="server" TextMode="Password"></asp:TextBox>
在页面加载时,我想把一些记忆密码放在我用cookie代码隐藏中解密的密码中。
我发现95%的答案是设置文本框值,如:
tbPassword.Attributes["value"] = "ThePassword";
但是,它不是最安全的方式,因为它生成以下HTML代码,在查看源时可见,其中密码以纯文本格式存储:
<input id="tbPassword" type="password" value="ThePassword" name="ctl00$cpMainContentParent$tbPassword">
我尝试过不同的jQuery方法,设置值为:
$("#tbLogin").val("ThePassword");
更好,因为该值在View Source中不可见,但密码在页面上的jQuery脚本中可见...
我也尝试注册客户端脚本并运行它,但由于我无法“取消注册”它,所以结果与普通jQuery sript相同...
您知道设置该值的任何解决方法,而不是在源代码中显示它吗?
答案 0 :(得分:2)
不要在INPUT元素中设置密码。而是将其设置为随机或固定值(如果要指示设置密码)或否则为空。正如您所说,这意味着密码在页面源中可见。要处理更改密码,请设置密码值,以便处理代码(服务器或客户端)知道密码何时被修改。
答案 1 :(得分:2)
正如鲍勃的评论所说,整个概念都存在缺陷。如果cookie有效,则只需跳过密码提示。如果它无效,则您无需自动填充。
话虽如此,你无法直接填写不能以某种方式拦截的文本框。即使您通过后加载AJAX调用填充它,用户仍然可以通过类似FireBug的内容查看内容。这是Web浏览器本质上固有的 - 从浏览器本身来看,没有什么是安全的,因为浏览器需要了解它才能呈现它。
如果确实想要这样做,一个选项是计算包含时间戳(或其他一次性值)的密码的自定义哈希值,并将文本框设置为该值。您需要接受标准密码和散列都是有效的,但散列将不可重复使用,因此无论用户是否看到它都无关紧要。