将对 /.well-known/change-password
的请求重定向到更改密码的网址
设置从 /.well-known/change-password
到网站的更改密码页面的重定向。这样一来,密码管理工具便可将用户直接转到该页面。
简介
如您所知,密码不是管理帐号的最佳方式。幸运的是,有一些新兴技术(例如 WebAuthn)和动态密码等技术正帮助我们进一步摆脱密码的束缚。不过,这些技术仍在开发中,不会快速变化。许多开发者至少在未来几年内仍需处理密码。在我们等待新兴技术和技术普及的同时,我们至少可以使密码更易于使用。
为密码管理工具提供更好的支持,可以做到这一点。
密码管理工具的作用
密码管理工具可以内置在浏览器中,也可以作为第三方应用提供。 它们可以通过不同方式为用户提供帮助:
为正确的输入字段自动填充密码:某些浏览器可以通过启发式方式找到正确的输入,即使网站未针对此目的进行优化。Web 开发者可以通过正确为 HTML 输入标记添加注解,帮助密码管理工具。
防范钓鱼式攻击:由于密码管理工具可以记住密码的记录位置,因此只能在适当的网址自动填充密码,不能在钓鱼式攻击网站上自动填充。
生成安全系数高且独一无二的密码:由于密码管理器直接生成和存储安全系数高且独一无二的密码,因此用户无需记住密码的单个字符。
使用密码管理器生成和自动填充密码已经为网络提供了很好的服务,但考虑到其生命周期,在需要时更新密码与生成和自动填充密码一样重要。为了适当地利用该漏洞,密码管理工具添加了一项新功能:
检测存在漏洞的密码并建议更新密码:密码管理器可以检测重复使用的密码,分析密码的熵和弱点,甚至可以从 Have I Been Pwned 等来源检测可能泄露的密码或已知不安全的密码。
密码管理工具可以在密码有问题时向用户发出警告,但在要求用户从首页导航到更改密码页面时,除了要完成实际的密码更改过程(因网站而异)之外,还会遇到很多麻烦。如果密码管理工具能够直接将用户导航到更改密码的网址,就会更容易。这正是用于更改密码的知名网址的用武之地。
通过保留一个众所周知的网址路径,将用户重定向到更改密码页面,网站就可以轻松地将用户重定向到正确的位置,以便他们更改密码。
设置“用于更改密码的知名网址”
建议将 .well-known/change-password
用作用于更改密码的知名网址。您只需将服务器配置为将对 .well-known/change-password
的请求重定向到您网站的更改密码网址。
例如,假设您的网站是 https://example.com
,更改密码网址为 https://example.com/settings/password
。您只需将服务器设置为将对 https://example.com/.well-known/change-password
的请求重定向到 https://example.com/settings/password
即可。大功告成。对于重定向,请使用 HTTP 状态代码
302 Found
、303 See
Other
或 307
Temporary Redirect
。
或者,您也可以使用 http-equiv="refresh"
,通过 <meta>
标记在 .well-known/change-password
网址提供 HTML。
<meta http-equiv="refresh" content="0;url=https://example.com/settings/password">
再次访问更改密码页的 HTML
此功能的目标是帮助用户的密码生命周期更加流畅。您可以通过以下两种方式让用户轻松更新其密码:
- 如果您的更改密码表单需要当前密码,请将
autocomplete="current-password"
添加到<input>
标记,以帮助密码管理器自动填充当前密码。 - 对于新密码字段(在许多情况下,这是两个字段,用于确保用户已正确输入新密码),请将
autocomplete="new-password"
添加到<input>
标记,以帮助密码管理器建议生成的密码。
如需了解详情,请参阅登录表单最佳实践。
在现实世界中如何运用这些数据
示例
得益于 Apple Safari 的实现,/.well-known/change-password
已在一段时间内在某些主要网站上提供:
亲自尝试,对自己的广告系列也一样!
浏览器兼容性
自 2019 年起,Safari 就开始支持用于更改密码的常用网址。从版本 86(计划于 2020 年 10 月底发布稳定版)开始,Chrome 的密码管理器将开始支持该密码,其他基于 Chromium 的浏览器也可能会随之发布。Firefox 认为值得实现此功能,但并未表示到 2020 年 8 月才打算这样做。
Chrome 的密码管理工具行为
我们来看看 Chrome 的密码管理器如何处理易受攻击的密码。
Chrome 的密码管理工具可以检查是否有已泄露的密码。导航到 about://settings/passwords
后,用户可以针对存储的密码运行检查密码,并查看建议更新的密码列表。
点击建议更新的密码旁边的更改密码按钮后,浏览器将执行以下操作:
- 如果
/.well-known/change-password
设置正确,请打开网站的更改密码页面。 - 如果未设置
/.well-known/change-password
且 Google 不知道回退机制,则打开网站的首页。
/.well-known/change-password
不存在,服务器也返回 200 OK
,该怎么办?在实际将用户转到此网址之前,密码管理工具会尝试向 /.well-known/change-password
发送请求,从而确定网站是否支持更改密码的常用网址。如果请求返回 404 Not Found
,很明显,网址不可用,但 200 OK
响应并不一定表示该网址可用,因为存在一些极端情况:
- 当没有任何内容但显示
200 OK
时,服务器端渲染的网站会显示“未找到”。 - 如果重定向到“未找到”网页后没有任何内容,服务器端渲染的网站会返回
200 OK
响应。 - 单页应用通过
200 OK
进行 shell 响应,并在没有内容时在客户端呈现“未找到”页面。
对于这些极端情况,用户将被转到“未找到”页面,从而引起混淆。
因此,有一种提议的标准机制可通过请求随机页面来确定服务器是否配置为在确实没有内容时使用 404 Not Found
进行响应。实际上,此网址也是预留网址:/.well-known/resource-that-should-not-exist-whose-status-code-should-not-be-200
。
例如,Chrome 使用此网址路径来确定是否可以提前从 /.well-known/change-password
获得正确的更改密码网址。
部署 /.well-known/change-password
时,请确保您的服务器会针对任何不存在的内容返回 404 Not Found
。
反馈
如果您对规范有任何反馈,请向规范代码库提交问题。
资源
照片由 Matthew Brodeur 在 Unsplash 用户获取