短信注意事项
在开始详细介绍之前,需要注意的是,使用一次性短信作为SMS的安全性比使用诸如Authy之类的专用应用程序的安全性低,因为该方法容易受到SIM交换攻击的攻击。它们也很不方便 -有时消息会花一些时间才能到达,如果用户不在手机范围内或在出国旅行时更换了SIM卡,则根本不会收到消息。
也就是说,通过SMS一次性获得密码很重要-它们是传递2FA代码的最常见方式,因为它们可以与用户已经拥有的技术一起使用。下载专用于管理2FA代码的专用应用程序超出了许多用户的范围。
这个怎么运作
标准背后的想法是预定义的SMS(文本消息)格式,如下所示:
最后一行必须与上述格式匹配,以@
和开头 @origin #code
。
然后,设备可以将其解释为明确的一次性密码。在Web应用程序上,您指定:
浏览器可以将站点的来源与(example.com)
收到的消息进行匹配,然后为用户自动填充此值。
一些移动浏览器已经做到了这一点(例如Safari),但是是通过猜测的方式实现的,并且不能保证您刚收到的一次性密码(OTP)属于正确的站点。如果没有origin
,则仿冒网站可能只是autocomplete="one-time-code"
在虚假站点上实施来收集OTP。
标准现状
这是Apple和Google今年早些时候发布的标准草案。支持似乎正在增长。GitHub本月初采用了它。标准草案可以并且确实会发生变化,因此请确保在执行之前进行最新评估。(而且,如果您还没有考虑,请考虑使用身份提供者来为您解决此问题。设计和构建安全身份验证很难做得很好,通常也不会使您的应用与众不同。)
阅读更多:
- https://wicg.github.io/sms-one-time-codes/
- https://github.blog/changelog/2020-08-13-phishing-proof-sms-autofill/
via https://trineo.com/blog/2020/08/phishing-resistant-one-time-codes