在连接的两端执行相同的身份验证数学运算

时间:2013-11-04 20:27:40

标签: ios api security

我正在构建一个必须通过PHP API与MySQL数据库通信的iPhone应用程序。

显然,我不希望任何人访问我的数据库。因此,我想在API和应用程序中加入一些不错的安全性。

经过一些研究,我发现这可能是一个好方法:

Building Secure Public API with PHP/MYSQL

它基本上表示代码对用户在应用程序端输入的变量执行一些数学运算。此数学返回一个值。然后,对API侧的变量执行相同的数学运算。如果值相同,则表示API获取保存请求。

问题是,我上面链接的SO帖子是关于PHP应用程序AND API的。我有一个用Objective-C和PHP API编写的应用程序,但我想执行相同的技巧。

有没有办法将这种安全性放入使用Obj-C应用程序和PHP API的服务中?如果不是,保护我的服务会有什么好主意?

2 个答案:

答案 0 :(得分:3)

如果您不希望任何人访问您的数据库,为什么不使用会话使用简单的身份验证。 NSURLConnection处理从服务器发送的cookie。

当您使用通用数学运算来计算用于验证请求的一些哈希时,可以轻松实现“执行某些数学”方法。只要您正确执行数学运算,无论您使用哪种语言都无关紧要。

答案 1 :(得分:2)

当您尝试选择一组适当的安全措施时,需要考虑以下几点。

  1. 您建议的方案是否保留任何敏感信息机密?它是否会阻止我作为恶意第三方阅读您所有用户的通信,即使我无法控制任何消息或以其他方式冒充他们?正如提议的那样,我没有看到任何阻止攻击者观看这些请求和响应的内容。也许这不是一个问题吗?如果需要SSL连接,那么防止这种窃听将会有很长的路要走。

  2. 您是否有一种有效的方式验证您的用户以建立自己的身份?如果我可以冒充其他一些用户,我可能会读取或覆盖他们的所有数据。这通常通过用户正确回答安全挑战时创建的某种形式的用户会话来处理。例如,用户可以输入他们的密码或者从诸如Facebook的第三方提供oauth令牌,然后被给予cookie或会话令牌以在一段时间内识别它们。有效的方案不允许攻击者轻易猜出这些会话标识符或窃取它们以供攻击者使用(见上文第1点)。

  3. 经过身份验证后,您是否强制执行授权规则,限制用户可以访问哪些数据?即使您知道(或至少相信)我是您的API的合法用户,您也不应该相信我只会尝试访问我自己的数据。我已经看到许多公共API,尤其是移动应用程序,在这一步失败了。在许多情况下,使用您自己的应用程序遵循完全合法的身份验证过程对我来说是微不足道的。一旦我这样做,我可以自由地使用该合法用户帐户和您自己的应用程序的身份验证过程来制作我想要的API请求。您不得盲目相信您的API客户表现良好。 我听到的最后一点常见的反对意见是“但我们编写了唯一的客户端应用程序”。不幸的是,编写客户端并不意味着你可以控制它。只要该应用程序在您的用户手中,其行为就不再是秘密。您的智能加密方案将被提取,重新实现,并用于从curl发出任意API请求。如果证明这很困难,那么当攻击者使用自己的参数调用sendEncryptedAPIRequest方法时,它将被重用。不是试图保持客户的行为秘密,同时仍然让用户可以使用它,最好将访问控制作为API的一部分来实施。

  4. 您是否可以验证从客户端收到的数据的完整性?即使我只能访问自己的数据,你是否相信我提供合理的价值观,如果我不这样做会产生什么后果?例如,查看几乎所有具有在线排行榜或高分列表的iOS应用程序。如果您相信客户报告自己的得分令人难以置信,他们中的一些人确实会报告非常高的分数。根据您的应用程序执行的操作以及是否共享任何数据,这可能或多或少存在问题。

  5. 这不会给你一个简单的“做这个,你的API将是安全的”答案,但我担心这是现实的情况。在您构建的软件的每个级别上,安全性都需要持续考虑。幸运的是,您的要求不太可能是唯一的,因此存在图书馆和常见做法来帮助解决上述所有方面。