-1

我正在使用 iOS 应用程序和基于 SMS 的验证系统来验证用户的电话号码。

为此建议我在设备上生成一个随机数。这个号码我想再次通过短信发送到设备。我的问题是如何通过网络传输这个号码?如果 some1 使用 Wireshark,他很容易就能看到验证码。我想了两个办法:

方式 1(设备 <-> SMS-网关):

在设备上创建代码 -> 发送到 SMS-Gateway-Provider -> 验证用户从 SMS 键入的代码

方式 2(设备 -> 服务器 -> 短信网关 -> 设备 <-> 服务器):

从服务器请求代码创建 -> 创建代码(保存在数据库中 + 发送加密代码作为响应)并将代码发送到 SMS-GW -> 将 SMS 发送到设备 -> 如果用户键入的代码正确,请检查服务器 <-> true / false 由服务器返回。

现在有更好或更简单(更重要的安全和实用)的方法吗?我也不确定如何加密/解密代码。它是一个仅包含数字的 6 字符代码。

我的服务器后端是 Java Jersey RESTful WS。

任何想法都值得赞赏。

4

1 回答 1

1

短信验证码系统正常工作的方式是:

  1. 设备对服务器说“给我发送一个代码”。
  2. 服务器生成代码并将其存储在数据库中(加密或使用 HMAC 散列)。
  3. 服务器将未加密的代码发送到 SMS 网关(通过 SSL)。
  4. 设备收到短信。
  5. 用户从 SMS 中输入代码,设备将代码发送到服务器(通过 SSL)。
  6. 服务器根据存储在数据库中的代码验证来自用户的代码。
  7. 服务器响应成功或失败。

没有真正的理由需要在设备本身上生成代码,或者将代码从服务器发送到设备。执行其中任何一项都会降低系统的安全性,因为设备会在接收到 SMS 之前知道代码是什么。只要您使用 SSL,当您将代码从设备发送到服务器(第 5 步)时,您也不需要加密代码。

代码的身份验证需要在服务器端完成,以便您是唯一控制身份验证过程的人。如果您让移动应用程序做出身份验证决定,您就会向更改您的应用程序的人或编写流氓应用程序以绕过身份验证过程的人敞开大门。

于 2013-07-26T11:56:59.620 回答