Captcha是Android身份验证的好解决方案吗?

时间:2015-11-20 22:37:42

标签: android asp.net web-services security authentication

我正在为android开发一个应用程序(作为团队的一部分),它与服务器(asp.net web服务)交互,以便在客户端同步和更新信息。

为防止攻击服务器,我们使用SSL连接,并使用soap header message验证用户包含用户名和密码。

这是同步的场景:

  1. 用户发送带有标题的Web服务请求包含:用户名,密码,请求时间,以及(防止中间人攻击)所有三个参数的哈希码(用户名+密码+时间)作为消息签名
  2. 网络服务检查:

    • 通过检查存储在服务器
    • 中的消息的签名是一条新消息
    • 如果这是一条新消息(并且没有重复),则通过散列所有三个参数(用户名+密码+时间)检查签名是否为真
    • 然后检查到期时间:消息是否为新(在5分钟内),以使旧消息过期
    • 验证用户名和密码
    • 验证数据类型和参数长度(在这种情况下,只是设备上次同步的时间)
    • 对请求的回复
  3. 设备将响应作为xml文件

    问题:

    因为这种情况我们必须为用户的设备提供身份验证信息,以便将来可以与服务器进行交互,而且我们也不希望从用户那里获取用户名和密码等任何信息(出于用户体验目的!)

    所以我们在服务器中构建一个Web Handler Captcha,当用户是新用户时,我们会向他们发送一个由他们的设备代码生成的验证码图像(它是由设备生成的,如https://www.server.com?appid=00000000-0000-0000-0000-000000000000),以及当用户发送时正确的验证码到服务器我们将新用户添加到我们的数据库(自动用户名和随机密码)并保存到Android的客户经理以备将来使用

    您认为这是一种认证和安全的好方法吗? 感谢您的提示

1 个答案:

答案 0 :(得分:0)

获取sessionId的Https和方法对大多数应用来说都足够安全了,无论如何我的意见:

除非你在散列变量中包含一个秘密,否则中间的人将会出现#34;可以更改参数并伪造有效的哈希。

我会推荐一种注册方法。它会将设备信息作为参数,如果你愿意,也可以使用验证码。

它将返回deviceId和deviceSecret。不得再次传输deviceSecret,只是用作哈希的一部分。

还要考虑使用计数器而不是时间。它可以帮助抵御重播攻击,整体上更容易。