【问题标题】:Set password textbox value in a secure way以安全的方式设置密码文本框值
【发布时间】:2012-09-27 14:11:22
【问题描述】:

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

我有一个带有密码文本框的自定义登录表单:
<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 脚本相同...

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

【问题讨论】:

  • 冒着听起来很愚蠢的风险,故意设置密码的任何尝试从本质上来说是不安全的吗?这个想法是挑战用户对他/她自己进行身份验证。 切勿以方便的名义牺牲安全性。无论提出什么解决方案,我认为拦截器只需要查看页面源或进行一些微不足道的数据包嗅探即可破坏您的安全性。
  • 您是否正在尝试实现某种“记住我的密码”功能?如果是这样,将密码存储在 cookie 中,读取服务器上的 cookie,解密并将其发送回浏览器,以便浏览器可以将其提交给服务器,这似乎不是一个好方法。
  • 我非常同意上面 Bob 的观点......无论如何,有一个问题要解决:如果您将 pwd 加密在 cookie 中,为什么不直接从中验证用户身份?或者只是实现一个“记住我”复选框?
  • 如果您在 cookie 中存储了密码,那么您做错了。如果你的密码可以被解密,那你就错了。

标签: c# asp.net textbox


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 2016-07-22
      • 2016-11-23
      相关资源
      最近更新 更多