使用绑定域名的验证码增强短信验证码的安全性

许多网站和 App 都使用短信发送验证码,以提供额外的登录安全保障。在 iPhone 上,Security Code AutoFill 功能可以在 QuickType 栏显示这些验证码,以方便用户使用。在运行 macOS Big Sur 的 Mac 上,Mac Catalyst 与 AppKit App 也可以利用这项功能。

此外,从 iOS 14 与 macOS Big Sur 开始,我们将允许你将验证码与特定网络域名相关联,为短信验证码提供更多一层安全保障。

绑定域名的验证码是怎样工作的

使用绑定域名的验证码时,AutoFill 会在——且只有在——所绑定的域名与你要登录的网站,或者与你的 App 关联的域名之一相匹配时,才会提供验证码输入建议。例如,假设你收到了一条以 @example.com #123456 结尾的短信,AutoFill 只会在你与 example.com 及其任意子域名交互,或者使用与 example.com 相关联的 App 时,才会提供验证码。如果你收到的短信以 @example.net #123456 结尾,而你要登录的网站域名是 example.com,或者要使用与 example.com 相关联的 App,AutoFill 就不会提供此验证码。这会让攻击者更加难以诱导用户在钓鱼网站上输入一次性验证码。

在《Safari 浏览器》QuickType 栏里显示的短信验证码

虽然 iOS 和 macOS 除了绑定域名的验证码外仍会显示普通短信验证码,但我们鼓励所有使用短信验证方式的开发者都采取这一标准,为使用你的网站或 App 的用户提供更加安全的体验。如果验证短信不包含域名信息,AutoFill 仍将继续在所有相关位置提供验证码。

如何设置绑定域名的短信验证码

你可以在网站和与域名相关联的 App 上使用绑定域名的验证码。

为网站设置绑定域名的验证码 在大多数情况下,AutoFill 应该可以在 iOS 版和 macOS Big Sur 版 Safari 上自动运行,不需要你提供额外信息。在无法自动运行时,你可以在网页的文本栏中添加 autocomplete=one-time-code 属性。这会提示 Safari 在该文本框中提供合适的验证码。

为 App 设置绑定域名的验证码 你可以为你的 App 提供关联域名,以支持绑定域名的验证码。如果你为域名提供了 Universal Links 功能,或者如果 AutoFill 目前正在 App 的登录页面为域名建议已保存的密码,那么就说明你的 App 就已经关联到域名了。

Learn more about supporting associated domains

注意:如果你在测试 App 登录流程时遇到问题,这意味着你可能需要提供额外的提示,即 App 中的哪些框是一次性验证码输入框。对于 iOS 与 Mac Catalyst 版本的 App,将文本框的 textContentType 属性设置为 UITextContentType.oneTimeCode;对于 macOS 上的 AppKit App,将 NSTextFieldcontentType 属性设置为 NSTextContentTypeOneTimeCode 即可。


如何设定绑定域名的短信验证码的格式

将你的 App 或网站设置为接收绑定域名的验证码后,你需要为你通过后台服务发送的短信验证码添加一个简单的附加域名,使其同时包括域名与验证码。你发送的文本将呈现下面的格式:

```xml
123456 是你的示例验证码。

@example.com #123456
```

短信最后一行以上的部分没有固定格式。你可以随意调整这个部分,但它应该能被接收验证码的用户所理解。

短信最后一行为 iPhone,iPad 或 Mac 上的 AutoFill 提供了必要信息,使之能够绑定域名与验证码,并为网站或 App 提供验证码输入建议。

为使绑定域名的验证码能正常生效,你必须在短信最后一行中加入这些信息,同时必须以正确顺序包含域名与验证码。

@example.com

这是最后一行的第一部分,它包含了你希望自动填入验证码的 App 或网站的域名。要确保在域名后输入一个空格,然后再开始带有一次性验证码的部分。

#123456(代表验证码 123456)

最后一行的第二部分以 # 开始,并包含你的 App 或网站的一次性验证码字符串。

改进短信验证码

开发者很容易执行绑定域名的验证码,使用 App 和网站的用户也很容易理解它们,这使得短信验证码变得更加安全。你也可以在 W3C(万维网联盟)的 Web Platform Incubator Community Group 里进一步了解绑定域名的验证码与此类短信格式的发展。

Learn more about domain-bound codes

Allowing apps and websites to link to your content