php - 双因素认证系统

标签 php security

我正在尝试使用 SMS 作为第二种身份验证方法来设计双因素身份验证系统(在 PHP 上)。这是一个测试项目,因此任何人都可以帮助我设计此服务吗?

这将是一个基于网络的系统,下面是我到目前为止所做的。

  1. 一旦客户输入用户名和密码,网站将向我们的服务器发送一个安全的 HTTP 请求,其中包含 MSISDN、一个 UID(用于识别 session )、他们的用户 ID 和密码。

  2. 我们的服务器会将请求添加到 MySQL 数据库,并使用代码、UID 和一些其他信息响应网站。

  3. 我们的服务器将向客户端发送一条包含一次性密码的短信。

  4. 一旦客户端将 OTP 输入网站,网站将向我们的服务器发送另一个带有加密 OTP 的 HTTPS 请求,我们将发送成功或失败代码作为响应。

这是我考虑过的流程。谁有更好的流量?或建议?

谢谢。

最佳答案

这可能工作正常,但是它不是双因素身份验证

除了密码,第二个因素可以是:

  • 您拥有的东西(例如 secureid、智能卡等)。
  • 你是什么(即各种形式的生物识别技术)。

因为我假设您的目标不是生物识别 ;),让我澄清一下为什么我说这不是第二个因素(您拥有的东西)。

为了符合第二个因素的条件,您需要保证设备的持有者(即预注册手机)是唯一可能已经收到了短信。
在当今的蜂窝网络中,情况并非如此。有一些技巧可以复制,例如SIM 卡;蜂窝运营商可以拦截;智能手机可以有拦截和重新发送的应用程序;等等
此外,让用户将代码重新键入网站允许对该附加密码进行所有标准的 Web 攻击:嗅探、拦截、MITM、 session 劫持等......

现在,需要明确的是,这仍然绝对有值(value) - 带外通信可以帮助确保明显的用户不会成为简单网络攻击、XSS 等的受害者。
我曾与很多喜欢这种解决方案的电信公司合作(它也恰好是他们商业模式的一部分,但无论如何 ;))

但是,根据您的情况,某些地方(例如银行、政府)需要真正的第二因素 - 即密码证明(通常)。这不是它。

关于php - 双因素认证系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5785781/

相关文章:

php - 保护 PHP 中的变量不被窃取

javascript - 当我尝试删除日历中的事件时出现 500(内部服务器错误)

php - 在调用它们的同一函数中使用查询结果

php - PDO 的 rowCount() 是否真的在为 UPDATE 查询运行多次时返回 0?

security - Mercurial 用户管理和安全

java - 只允许我的 android 应用程序在 java 中执行端点 api

php - WordPress上传媒体问题 fatal error : Maximum function nesting level of '256' reached

php - 如何将 JSON 对象映射到 PHP 类?

C#.NET : Acquire administrator rights?

c# - 电子邮件地址用 C#、正则表达式隐藏一些字符