我正在尝试使用 SMS 作为第二种身份验证方法来设计双因素身份验证系统(在 PHP 上)。这是一个测试项目,因此任何人都可以帮助我设计此服务吗?
这将是一个基于网络的系统,下面是我到目前为止所做的。
一旦客户输入用户名和密码,网站将向我们的服务器发送一个安全的 HTTP 请求,其中包含 MSISDN、一个 UID(用于识别 session )、他们的用户 ID 和密码。
我们的服务器会将请求添加到 MySQL 数据库,并使用代码、UID 和一些其他信息响应网站。
我们的服务器将向客户端发送一条包含一次性密码的短信。
一旦客户端将 OTP 输入网站,网站将向我们的服务器发送另一个带有加密 OTP 的 HTTPS 请求,我们将发送成功或失败代码作为响应。
这是我考虑过的流程。谁有更好的流量?或建议?
谢谢。
最佳答案
这可能工作正常,但是它不是双因素身份验证。
除了密码,第二个因素可以是:
- 您拥有的东西(例如 secureid、智能卡等)。
- 你是什么(即各种形式的生物识别技术)。
因为我假设您的目标不是生物识别 ;),让我澄清一下为什么我说这不是第二个因素(您拥有的东西)。
为了符合第二个因素的条件,您需要保证设备的持有者(即预注册手机)是唯一可能已经收到了短信。
在当今的蜂窝网络中,情况并非如此。有一些技巧可以复制,例如SIM 卡;蜂窝运营商可以拦截;智能手机可以有拦截和重新发送的应用程序;等等
此外,让用户将代码重新键入网站允许对该附加密码进行所有标准的 Web 攻击:嗅探、拦截、MITM、 session 劫持等......
现在,需要明确的是,这仍然绝对有值(value) - 带外通信可以帮助确保明显的用户不会成为简单网络攻击、XSS 等的受害者。
我曾与很多喜欢这种解决方案的电信公司合作(它也恰好是他们商业模式的一部分,但无论如何 ;))
但是,根据您的情况,某些地方(例如银行、政府)需要真正的第二因素 - 即密码证明(通常)。这不是它。
关于php - 双因素认证系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5785781/