场景:我想创建一个用户注册帐户的应用程序,服务器向他们发送一次性密码以通过短信验证其联系人详细信息。用户输入收到的代码以验证其详细信息。
然而,发送短信需要花钱,但收到一个是免费的,而我的短信网关让我可以阅读收到的短信。
所以我可以在我的应用程序中创建一个屏幕,让用户通过预先填写的网关号码和消息向我的网关发送短信(例如,"嗨,请激活我的帐户,代码为:34GKTT551T") 。用户只需要按发送。
我的网关不会让用户键入他们已收到的代码并验证服务器上的代码,而是选择用户发送的代码并将消息发送到我的服务器,然后验证代码,从而验证代码。验证用户电话号码是他们在注册时输入的电话号码。
问题:这种方法有什么根本的错误吗?
以这种方式做事的利弊是什么?是的,我知道短信可以伪造,但比伪造一个也可以使用的电子邮件更难。我不认为这是正确的双因素身份验证的替代方法,但这种方法值得做,作为一种低成本的替代方案,不要求用户做任何其他特殊的事情。
PS。这是关于堆栈溢出的第一个问题,所以很好。
答案 0 :(得分:1)
这不是安全的,因为SMS的发件人很容易被伪造。 Take these instructions for how to achieve this on Kali OS
还有服务such as this one。
对于拥有用户密码但不知道上述信息或受害者手机号码的人来说,它所提供的只是一层非常薄的安全保障。受害者的电话号码可以通过社会工程等其他方式实现。如果有一个单独的手机用于2FA的唯一目的,它可能会有效,但为什么不使用免费的Google身份验证器API(适用于iOS和Android的Google身份验证器应用)?