短信验证码收到了,自动填充却没有填进去:该查什么

短信验证码收到了,自动填充却没有填进去:该查什么

消息就在屏幕上。六位数字,几秒钟前刚到。但网站上的那个输入框依然空着,键盘上方没有出现任何建议,而这串本该帮你省下几秒钟的验证码,现在得靠你读、记、再打一遍——而人正是在这个时候会把两位数字打颠倒,然后断定某个地方坏了。

一句话总结: 如果你看得见这串验证码,说明消息已经送达了,出问题的是录入而不是送达。自动填充是手机或浏览器加在一条已经到达的消息之上的便利功能,只有在好几件互不相干的事同时成立时才会出现。在 Android 上,Chrome 会在第一次识别出一次性验证码输入框时请求权限,之后也只在你点击提示时才填入。没有出现建议,并不构成对某个网站真伪的判定。在输入验证码之前,先确认它对应的服务、账号和当前这次验证;如果消息里写明的域名和你正在用的页面对不上,不要绕过这个不一致。

自动填充是便利功能,不是送达路径

先弄清这条链上到底是哪一环出了问题,会很有帮助。

验证码是通过一条消息到你手上的。这条消息到底会不会到,取决于它被发往哪个号码,以及持有那个号码的线路——那是另一个话题,有它自己的成因;如果你正等着的是一份纯流量旅行套餐上的验证码,那个话题就更要紧。

自动填充坐在这之上。一旦一条消息落到了操作系统能读到的地方,系统可能会提出替你把验证码填进某个输入框。如果这个提示没有出现,消息本身并没有发生任何变化——不过这和「验证码仍然有效」不是一回事。一条看得见的消息,可能是一条旧的,可能是一条已被取代的,也可能是在回答另一次验证,而不是屏幕上的这一次。而在验证码与域名绑定的情况下,建议没有出现,可能反映的是页面和验证码里写明的域名对不上,这件事值得去查,而不是覆盖过去。

所以第一件要确定的,仅仅是你能不能看见一串验证码。如果能,说明有一条消息被送达了,而下面所有内容讲的都是从消息到输入框的最后这几厘米——前提是你已经确认了眼前这串验证码,属于你实际正在完成的那个服务、那个账号和那次验证。

在验证码被提示出来之前,有哪些条件要同时成立

好几个彼此独立的条件必须同时成立,这正是这个功能比它看上去更脆弱的原因。

系统必须把这个输入框识别为一次性验证码输入框。 一个在你看来显而易见的输入框,未必会被识别成那样。网站怎么标示这一点,属于这个服务自己的实现,不是你这边能提供或者改动的东西。

权限必须存在。 在 Android 上,Google 记载了 Chrome 会在第一次识别出一次性短信验证码输入框时请求权限。Google 的这个页面也涵盖了此前拒绝过该访问权限的情况,在断定这个功能不可用之前,这一点值得先查一下。

你必须动手。 填入不是无声发生的。Chrome 有据可查的行为是:会显示一个提示,你点它,验证码才进去。在 iPhone 上,Apple 关于自动填写短信验证码的说明,描述的是检测到的验证码会在键盘上方作为建议出现,由你点选。两种情况下,验证码都是被提供,而不是被替你插入。

消息必须在这个功能正在查看的地方。 这个条件在下面有它自己的一节。

对于与域名绑定的验证码,消息里写明的域名必须对得上。 Apple 记载了与域名绑定的短信验证码的自动填充:验证码会带上它所属的域名,自动填充会把它和 Safari 当前的域名或应用的关联域名做比对。Apple 把这一点作为对钓鱼的一种防护来介绍。两者对不上时,就不会给出建议。

Android 这边也有相应的设置。Google 的页面描述了验证码自动填充的若干选项,覆盖应用和网站里的验证码,以及默认浏览器里的验证码;在断定某部手机就是做不到之前,这一点值得知道。

验证码在哪里,自动填充又在看哪里

这个区别不是一个设置问题,也正因为如此,值得早一点去查。

本文讲到的这些短信功能,读的是到达手机自身消息系统里的消息。如果验证码是从别的地方到你手上的,那这些具体功能就无从下手。这说的是上面那些有据可查的短信自动填充,而不是在断言所有集成都如此:比如 Apple 就记载了 Safari 中来自「邮件」的验证码自动填充,所以其他渠道并没有被一概排除,而且不同浏览器、密码管理器和设备之间的能力各不相同。

最清楚的例子是租用的验证号码。当你在我们这里订一个号码时,这笔订单的消息会出现在你账号里这笔订单自己的收件箱中,不管你打开的是哪块屏幕。那是一个网页,显示的是一个你租来的号码所收到的消息的内容,而不是你手机自身消息应用里的一条消息。本文讲的短信自动填充读的是手机的消息,所以它在那里无从下手,把验证码搬过去是你自己做的一次复制。这说的是这一个功能,而不是浏览器或密码管理器可能提供的所有集成。

当验证码是到达某个服务自己的应用里或某个聊天平台,而不是作为短信到来时,情况也类似。这个功能只看一个特定的地方,如果验证码不在那里,它的沉默不携带任何关于验证码本身的信息。邮件不是这件事的一个干净例子,因为 Apple 记载了 Safari 中来自「邮件」的验证码自动填充;至于某个不相干的渠道支持什么,取决于应用、浏览器和系统的那个组合。

症状指向什么

你看到的 它与什么情况相符 先查什么
验证码在手机消息里,完全没有提示 权限未授予或此前被拒绝过,或者输入框没有被识别 应用和你的浏览器有没有启用验证码自动填充
出现了提示,但输入框仍然是空的 焦点在另一个输入框上,或者你点下去时页面变了 直接点进验证码输入框,再按流程接下来提供的方式操作
验证码在租用号码的订单页面上 符合预期——那条消息并没有到达手机的消息应用 自己从订单页面把它复制出来
出现的建议是一个较旧的验证码 存在不止一个验证码,而被提供的未必是最新的那个 读消息里的验证码本身,比对之后再点
在某个网站上没有建议,在别处有 可能是一个与域名绑定的验证码没有匹配的站点,也可能是输入框没有标记 你到这个网站,是不是自己进来的,而不是通过某个链接

最后一行要在两个方向上都小心。没有建议,并不能确立这个网站是欺诈的;有建议,也不能确立它是安全的。自己发起这个流程是必要的,但同样不能把这件事定下来。域名绑定是一种真实的防护,所以当验证码写明的域名和你所在的页面对不上时,这个不一致才是该认真对待的东西,而不是该绕过去的东西。

两个值得走一遍的情况

两个都是假设的情形,写出来是为了说明推理过程,不是在报告真实案例。

那条从未碰过手机的验证码。 有人租了一个号码去注册某个服务,在笔记本上开着订单页面,并且就在同一台笔记本上进行注册。验证码到了,在订单的收件箱里看得见。然后他花了一段时间,去找为什么自己的手机不提出替他填。那部手机从来没有收到过那条消息:它是被送到一个租用号码上、并显示在一个网页上的。本文讲的短信自动填充无从读起,所以从订单页面把验证码复制出来才是直截了当的答案。如果验证码在那里根本就没出现过,那是一个送达问题,而不是自动填充问题,此时该读的是临时号码对「再收一次验证码」能做什么、不能做什么。

被当成警告来读的那个缺席的建议。 有人打开一个熟悉的服务,请求一个验证码,收到了,然后注意到平时会出现在键盘上方的那个建议,这次没有出现。他的第一反应是:这个网站会不会是假的。这个推断站不住脚:建议可能缺席,是因为输入框没有被标记为验证码输入框,是因为权限在某个时候被拒绝过,也可能是因为验证码绑定的域名和他所在的页面对不上——而这几种情况里,没有一种能把一个真实网站和一个欺诈网站区分开。他是怎么到这个页面的,仍然要紧——从一条消息或一封邮件里点链接进来,是一个应该停下、离开这个页面、按平时的方式重新进入这个服务再开始的理由。但自己输入网址或者打开一个收藏的书签,本身也不构成「目的地是真的」这件事的证明,所以同样定不下来。在输入验证码之前,值得确认的是:它写明的服务和账号是不是你预期的那个,它是不是在回答你眼前这次验证,以及你所在的页面是不是这串验证码被签发给的那一个。域名对不上,不是那种因为流程是自己发起的就可以绕过去的事情。

手动输入验证码,同时不制造出新问题

手动输入验证码是一件正常的事,附在它上面的那点谨慎是狭义而具体的。

把它输入到一个你自己发起的流程里,并且事先确认过:这串验证码写明的服务和账号是你预期的那个,而且它回答的是屏幕上这次验证。自己进入这个网站是必要的,但仅凭这一点还不够。不要把验证码念给任何人听,不要转发,不要粘贴到聊天里,也不要在别人引导你去的页面上输入——关于这一点,收到没有申请过的验证码该怎么办讲得更充分。

如果来了不止一条,请从消息里读验证码,而不是从通知预览里读,因为最新的那条通知未必对应最新的那个验证码。

如果你认真重打一遍之后验证码仍被拒绝,那就检查:它是不是对应你正在登录的那个服务和那个账号,它是不是在回答当前屏幕上这次验证,以及它有没有超过这个服务声明的有效期。按流程自己显示的提示去做;只有在流程提供这个选项的情况下,才谈得上再要一个验证码。如果号码有可能在更早的某个环节就被填错了,那么检查号码格式和填写方式是该去看的地方。

有一件事不要做:不要为了让自动填充生效,就把读取你消息的宽泛权限授予一个不相干的应用。这个功能并不需要它,而这笔交换很不划算。

本文的局限

本文讲的是手机或浏览器在什么条件下会提示一个验证码,依据是 Google 关于 Android 版 Chrome 的文档和 Apple 关于 iPhone 的材料。它没有覆盖所有设备、启动器或键盘,而且即便底层行为一致,各家厂商的设置界面也不相同。

某个具体网站的输入框会不会被识别,属于这个服务自己的实现。读者可能观察得到它,却改不了它,而你自己设备上的设置也替代不了它。

本文的范围限于文中点名的那些短信自动填充功能。其他集成是存在的——Apple 记载了 Safari 中来自「邮件」的验证码自动填充——至于任何一个浏览器、密码管理器或设备组合支持什么,不在本文描述之内。

自动填充的行为本身,不是一种可靠的分辨真站和假站的方法,本文也没有把它当作这样的方法来提供。域名绑定是一种真实的防护,所以对不上时值得留意,而不是找个办法绕过去;它没有提供的,是一个你可以从「没有提示」这件事上直接读出来的结论。

我们的常见问题讲的是下单这一侧,而工单是处理你在我们这里下的某笔订单的具体问题的途径。

FAQ

验证码在我的消息里,但什么提示都没有。是验证码坏了吗?

没有提示这件事,并不能对验证码给出任何决定性的说法。一条看得见的消息说明它被送达了,便利层没起作用并不改变这一点。但这也不能确立验证码仍然有效——它可能是更早的一条,也可能是在回答另一次验证。先确认它属于哪个服务、哪个账号、哪次验证,然后手动输入。

为什么自动填充在有些网站上管用,在另一些上不管用?

因为其中一部分要求属于网站,而不属于你的手机。输入框必须被识别为一次性验证码输入框,而与域名绑定的验证码,会拿消息里写明的域名来做比对。这两件都取决于服务自己的实现,所以同一部手机在不同地方表现不同。

没有出现建议,是不是意味着页面是假的?

单凭这一点不是;反过来也不安全:出现建议并不构成保证。提示可能缺席,是因为权限被拒绝过,是因为输入框没有被识别,也可能是因为验证码绑定的域名和页面对不上。Apple 把域名比对作为对钓鱼的一种防护来介绍,所以对不上时值得认真对待,而不是绕过去。把「缺席」当作一个去查验证码属于哪个服务和账号、以及页面是否对得上的理由,而不是当作任何一个方向上的判定。

为什么我的手机从来不提示租用号码上收到的验证码?

因为那条消息并没有到达你手机的消息应用。发往租用号码的验证码,是由那个号码接收、并显示在你账号里那笔订单的收件箱中的,而那是一个网页。本文讲的短信自动填充读的是手机自身的消息,所以它从那个页面上无从提供什么,把验证码复制过来是你自己另外做的一个动作。

手动输入验证码安全吗?

在一个你自己发起的流程里是安全的,前提是你已经确认过:这串验证码写明的服务和账号是你预期的那个,而且它回答的是你眼前这次验证。自己发起流程是必要的,但单凭这一点并不能确立目的地是真的。绝不要把验证码转达给主动联系你谈这件事的人,无论理由听起来多么合理。

为了让自动填充生效,我该不该给某个应用读取我全部消息的权限?

不该。验证码提示并不需要把宽泛的消息访问权交给一个不相干的应用,而这么做暴露的东西,远远超过你本来想输入的那一个验证码。如果内置功能没有提示验证码,手动输入是更划算的选择。

准备试试 SMSCode?

创建账户,两分钟内获取第一个虚拟号码。

立即开始 →