1

是否有任何安全的方法可以在密码模式下为文本框设置值?

我有一个带有密码文本框的自定义登录表单:
<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");

这要好得多,因为该值在查看源代码中不可见,但密码在页面上的 jQuery 脚本中可见...

我也尝试注册客户端脚本并运行它,但因为我无法“取消注册”它,所以结果与普通的 jQuery sript 相同......

您是否知道设置该值而不在源代码中显示它的任何解决方法?

4

2 回答 2

2

不要在 INPUT 元素中设置密码。相反,将其设置为随机或固定值(如果您想指示已设置密码),否则为空。正如您所说,这意味着密码在页面源中可见。要处理更改密码,请在密码值时设置一个标志,以便服务器或客户端的处理代码知道密码何时被修改。

于 2012-09-27T14:22:57.753 回答
2

正如鲍勃的评论所说,整个概念是有缺陷的。如果 cookie 有效,则跳过密码提示。如果它无效,那么您就没有什么可自动填充的了。

话虽如此,您无法直接填充无法以某种方式拦截的文本框。即使您通过加载后 AJAX 调用填充它,用户仍然可以通过 FireBug 之类的东西看到内容。这是网络浏览器的本质所固有的——浏览器本身没有什么是安全的,因为浏览器需要理解它才能呈现它。

如果您真的想这样做,一种选择是计算包含时间戳(或其他一次性值)的密码的自定义哈希,并将文本框设置为该值。您需要接受标准密码和哈希作为有效,但哈希将不可重复使用,因此用户是否看到它并不重要。

于 2012-09-27T14:25:43.587 回答