是否应允许网站禁用表单或字段的自动完成功能?

信息安全 Web应用程序 网页浏览器 html
2021-08-11 02:18:58

目前,有一个名为 的 HTML form/input属性autocomplete,当设置为 时off,会禁用该表单或元素的自动完成/自动填充。

一些银行似乎使用它来阻止密码管理器工作。如今,雅虎邮箱等网站似乎也在这样做,因为他们认为密码管理器不安全。

几周前,我在 Firefox 中实现了一项功能,该功能使用户可以选择仅针对用户名/密码字段覆盖此功能(即禁用密码管理器)。现在有一个请求要求它autocomplete=off默认覆盖。引用问题:

这种行为是对认为密码管理器有害并因此希望阻止它们发挥作用的网站的让步。总的来说,我认为这些网站通常是错误的,不应该对我们的行为有太多的控制。

这对我来说很有意义,原因与BenB 的评论中的原因类似。

autocomplete=off 最近被滥用了很多。Yahoo 开始使用它进行登录(包括 webmail 和 my.yahoo.com),这就是我停止使用 Yahoo 的原因。Webmail 应用程序——甚至一些更大的提供商——现在都在使用它,这显然不是目的。管理员非常自以为是,并坚持保留此“出于安全考虑”,因为密码保存“不安全”。

他们被误导了,因为

  • 键盘记录器存在并且很普遍,可能比可以读取 Firefox 密码存储的恶意软件更广泛。
  • 小侄子的简单攻击也存在:回头看看
  • 可能最重要的是,每次强制用户重新输入密码实际上会迫使他们使用简单的密码——易于记忆、易于输入,甚至可能在多个网站上使用。这显然会显着降低 整体安全性,从而对安全性构成威胁。

因此, autocomplete=off 对安全性有害。

对于最终用户来说,这是一个巨大的痛苦,除了切断整个客户关系之外,他们没有任何退路。

Internet 上发布了许多解决方法(通常基于书签)。IE11 已经移除了对autocomplete=off.

问题是双重的:

  • autocomplete=off当网站在密码字段上使用时,它的安全性是否有显着提高?或者根据 BenB 的评论,它实际上对安全有害吗?
  • 浏览器是否应该默认允许此属性并给予网站如此多的控制权?(此位主观,请勿回答)

虽然我的情况特定autocomplete=off于用户名/密码字段(代码仅影响密码管理器),但我欢迎在更广泛的方面输入禁用autocomplete=off

4个回答

问题在于,这一设置同时控制了浏览器中两个相似但完全不同的功能的行为,因此难以获得最佳结果。

首先,我们有你可能称之为“智能”或“天真”或“自动”的自动完成功能。

这是原始的自动完成技术。当您在各种网站上填写表格时,浏览器会查看表格的名称和您填写的内容,并默默地记住详细信息。然后,当使用外观相似的表单访问另一个站点时,它会使用从您之前在其他站点上的行为中窃取的值“有用地”填充字段。

这里的想法是在您无需任何配置或决策的情况下节省您的时间。填写你的名字?我们会自动填写您上次使用的名称。填写信用卡?我们将填写您在其他地方使用的信用卡。

该浏览器热衷于提供帮助,它与所有其他站点共享您来自一个站点的秘密,以防万一它是您想要的。从安全的角度来看,由于所有明显的原因以及一些不明显的原因,这都是一场灾难。它必须被禁用,并且可能不应该从一开始就实施。

其次,我们有“显式”或“安全”或“配置”自动完成

这主要是保存的用户名和密码的世界。在这个化身中,浏览器仅在您明确批准的情况下保存您的表单数据。理想情况下,它将数据存储在加密存储中,最关键的是,数据与单个站点紧密关联。因此,您的 Facebook 密码将保留在 Facebook,而您的亚马逊地址将保留在亚马逊。

这种技术的不同之处在于,当检测到匹配环境时,浏览器会重放保存的行为。相比之下,另一种技术是通过寻找相似性来自动预测期望的行为。

当您访问该站点并显示登录表单时,您的浏览器应该会自动填充您为此目的明确保存的数据。对于用户来说,交互应该是快速且无需思考的。而且,至关重要的是,绝对应该在网络钓鱼尝试中中断。浏览器应该完全不愿意向网络钓鱼站点提供凭据,以使她停下来思考为什么事情不工作。

此功能是您抵御网络钓鱼的主要防线。它必须工作。如果用户不能依赖此功能在正常条件下透明且轻松地工作,那么您的安全性将不可避免地降低。

虽然这主要用于凭证存储,但它也是放置其他安全数据的安全地方,例如支付卡、地址、安全问题等。这些附加数据可能不是特定于站点的,但可能应该在没有提示的情况下不会自动填充。

统治他们的一种选择

这里的问题是,在许多实现中,该autocomplete=false选项控制这两种行为。一个是你想留下的,一个是你想杀的。

理想情况下,永远不应禁用“安全”自动完成功能。我们依靠此功能来增加安全性,因此不应允许被误导的站点操作员危害这一点。

理想情况下,默认情况下应禁用“自动”自动完成,仅在您真正希望浏览器重新使用来自其他站点的输入的那些罕见情况(如果有)时启用。

当我进行渗透测试时,如果表单字段要求提供敏感数据(例如信用卡号)、不是密码字段并且没有 autocomplete=off,我会报告一个问题。

合理的是,浏览器非常明智地管理密码的自动完成:它们让用户选择是否存储密码,并且(大多数)用户可以做出明智的决定。

但是,对于非密码字段,自动完成行为是不可取的。如果我让某人使用我的电脑,他们会转到电子商务结帐页面,并看到我的信用卡详细信息自动完成 - 这很糟糕。

浏览器忽略的原因autocomplete=off是因为有一些网站试图禁用密码的自动完成。

那是错的; 2014 年 7 月,Firefox 是最后一个最终实施更改以忽略任何试图关闭密码自动完成功能的网站的主要浏览器。

任何网站试图绕过浏览器的偏好都是错误的,这就是浏览器忽略它的原因。没有理由知道为什么网站应该尝试禁用密码保存。

  • 铬忽略它
  • Safari 忽略它
  • IE 忽略它
  • Firefox 忽略它

如果我是一个特殊的雪花呢?

有些人提出了一个很好的用例:

我有一个共享的公共区域的信息亭式计算机。我们不希望有人(无意或有意)保存他们的密码,以便下一个用户可以使用它。

这并不违反声明:

任何网站试图绕过浏览器的偏好都是错误的

这是因为在共享信息亭的情况下:

  • 具有古怪策略的不是网络服务器
  • 它是客户端用户代理

浏览器共享计算机)要求不尝试保存密码。防止浏览器保存密码的正确方法是将浏览器配置不保存密码。由于您已锁定并控制此信息亭计算机:您可以控制设置。这包括保存密码的选项。

在 Chrome 和 Internet Explorer 中,您可以使用组策略(例如注册表项)配置这些选项。

Chrome 政策列表

启用自动填充

启用自动填充

数据类型:布尔值 (REG_DWORD)

Windows 注册表位置: Software\Policies\Chromium\AutoFillEnabled

说明:启用 Chromium 的自动填充功能,并允许用户使用以前存储的信息(例如地址或信用卡信息)自动填写 Web 表单。如果禁用此设置,用户将无法访问自动填充。如果启用此设置或未设置值,自动填充将保持在用户的控制之下。这将允许他们配置自动填充配置文件并自行决定打开或关闭自动填充。

请告知尝试禁用密码自动补全是错误的,浏览器故意忽略任何尝试这样做的人,他们应该停止做错事。™

如果希望浏览器不自动完成项目,则应浏览器配置为关闭自动完成功能。任何网站都不应该将这种偏好强加给其他用户。

我已经为几家银行做了几次渗透测试,我们总是建议禁用自动完成。这样做的原因是大多数用户不使用密码管理器,因此密码以纯文本形式保存在浏览器中的某个地方(某些浏览器实际上确实对自动完成密码进行了加密,但这只是最近才完成的)。

OWASP 测试指南也建议这样做:

大多数浏览器都存在表单字段的缓存。对于包含敏感信息(如信用卡号)的表单字段,应使用可在每个 INPUT 标签1中使用的 AUTOCOMPLETE=OFF 属性禁用自动完成功能此功能将无法针对当前版本的 HTML 规范进行验证,但现在大多数浏览器都支持它。

只要敏感信息受到保护,就没有问题。此设置的最大问题是使用共享计算机时。缓存您的信息的风险非常大,一个不太无辜的绕过者可能会窃取您的信息。请记住,大多数用户的受教育程度不如这里的大多数人。

现在银行实际上无法验证您使用的是个人计算机还是共享计算机,因此对此的风险评估认为最好禁用自动完成功能。