2

我一直在帮助一些人使用他们的电脑并修理它们。其中一个人问我在自动表单字段中存储密码的安全性。我向他们展示了如何从控制台中的简单 jQuery 调用中检索密码的快速技巧。在一些网站上工作时,我一直在试图找出一种方法来阻止使用这个技巧来找出保存的密码是什么。

如果您不知道,要了解我在说什么,请尝试以下操作。

  1. 使用 jquery 导航到一个网站(或 jquery 网站),然后打开自动表单填写或填写密码字段。
  2. 检查元素以显示密码 id 字段或使用 jquery 调用该字段的某种方式
  3. 在控制台中运行类似的东西$('#password').val()并观察密码显示。

我想知道作为 Web 开发人员是否有某种方法可以防止在我的网站上使用它,但仍然允许使用它来获取网站代码中字段的值。

谢谢。

编辑

来自 facebook 并自动填写登录名(为安全起见已涂黑)

在此处输入图像描述

然后在查询页面并$jq('#pass').val()在不更改任何内容的情况下运行控制台后(密码为安全起见)

在此处输入图像描述

用例

用户 1 在公共计算机上,他们允许浏览器保存登录信息

用户 1 离开,用户 2 去同一个站点。浏览器自动填写登录信息

用户 2 运行命令并获得对密码的访问权限

4

2 回答 2

4

简短的回答:没有。从逻辑上讲,没有办法删除访问该字段中的数据保留自动填充功能的能力。密码框的值就是密码,这就是您要提交的内容。您要么必须禁用自动填充才能正确阻止这种情况的发生。

然而...

您可以隐藏该值,方法是从password输入框中取出值并使用.val(""). 然后提交存储值的变量而不是提交时框中的内容。如果您使用许多混淆变量名称的工具之一来缩小脚本,那么找到该值会稍微困难一些(尽管当然不是不可能)。通过对值进行加密和解密,您可能会变得越来越疯狂,但归根结底,获取密码的所有密钥必须在脚本中,以便脚本本身可以在适当的时间访问它。你会阻止少数几个有人试一试但不是专职人员的情况。

您还必须牢记以下所有注意事项:

  • 如果用户不更改密码变量,您必须确保仅提交密码变量。如果用户更新了密码框中的信息,您需要提交该信息。使用像 knockout.js 这样的工具,您可能能够不断获取和隐藏用户在该框中键入的任何内容,但这将是另一层复杂性

  • 您希望用户清楚地知道发生了什么。如果他们的密码框突然空白,大多数用户会很困惑。

让我们现实一点。如果“黑客”可以直接访问某人的计算机,并且他们想要密码,他们就会得到它。在使用您的 javascript 之前,他们有一千种其他方法可以首先获取密码(键盘记录器,在他们键入时站在他们身后,如果您不使用 HTTPS 或加密数据,则使用数据包嗅探器,用钝器敲击它们等。 ) 在某处有一个关于这个的 XKCD 片段。编辑:找到它:)

于 2012-08-17T21:10:06.377 回答
0

您可以简单地禁用自动完成,这样密码就不会存储在输入字段中。

输入类型=“密码”自动完成=“关闭”

于 2015-03-23T08:49:08.450 回答