【问题标题】:Storing remote database credentials safely in iPhone app在 iPhone 应用程序中安全地存储远程数据库凭据
【发布时间】:2012-01-07 20:49:43
【问题描述】:

我正在开发一个简单的 iPhone 应用程序,用户可以在其中注册并使用他们的电子邮件/密码登录。这些值存储在远程数据库中。

我正在使用 Cloudant 来存储这些信息(CouchDB 很棒),并已授予新用户只读权限(创建的 API 密钥/通行证)。为了与 Cloudant 通信,您显然需要一个 URL 来访问它(例如https://user:pass@db.cloudant.com),它以字符串的形式存储在应用程序中。

现在,虽然我知道这很不安全,但我想不出任何其他替代方案来保证 db URL 的安全(特别是它的用户名/密码)。我见过有人谈论使用另一个服务器代理来获取凭据,但这似乎有点尴尬。

任何帮助或想法将不胜感激!

【问题讨论】:

    标签: ios database security couchdb cloudant


    【解决方案1】:

    您是否尝试从您的 iPhone 应用程序直接连接到数据库?您不应该授予您的应用程序对整个远程用户表/数据库的读取权限。迟早有人会发现并拥有对您数据的读取权限。无论您如何尝试混淆它,用户/密码组合都需要以某种方式存储在您的应用程序中。

    您应该做的是构建一个连接到您的数据库并验证您的用户的 Web 服务。数据库密码保留在服务器上。这种代理方法并不尴尬,它是使您的数据库登录远离您的用户的唯一方法。

    【讨论】:

    • 我认为会是这样。我的意思是添加另一个启用了 Web 服务的层(另一个服务器)时很尴尬。但如果这就是它必须的方式(以及其他人做同样事情的方式),那很好!我更喜欢最佳实践方法,干杯!
    • 是的,这种情况下的最佳实践是抽象存储(数据库)。 Web 服务只会向您的应用程序回答“用户/密码组合正常”或“无效登录”。在这方面,它并不是真正的代理,请将其视为您可以通过 HTTP 访问的服务器功能;)
    • 听起来不错!尽管 Web 服务的 URL 仍将在应用程序内部,并且用户凭据将通过 POST 发送。这比直接访问数据库要好。感谢您的洞察力!
    • @crawf 我是 web 开发新手,所以,我们应该创建一个 web 应用程序,我们将从应用程序调用。 Web 应用程序需要身份验证,然后在成功登录后,Web 应用程序将访问数据库并返回请求的信息。我们需要将用户/密码放入应用程序中以调用网络应用程序。这与仅在主应用程序中拥有数据库凭据有何不同?如果我遗漏了什么,请告诉我。
    【解决方案2】:

    一种选择是在云中创建您自己的服务,从而抽象出您的存储空间。这还具有允许您在不更新所有设备的情况下更改存储的好处。

    在该模型中,服务存储凭据以访问存储,并且您在应用程序层实现用户安全。我也不认为它是一个代理层——这意味着它是一个很薄的通道。如果您开发一项服务,您应该定义一个与存储无关的 Web 界面(rest、soap)。在这种情况下,它是一项服务,而不是代理。

    编辑:

    Web 服务通常会对用户进行身份验证(不要自己编写)。使用 SSL 的基本身份验证是典型的。然后,在该服务上下文 API 中,您可以访问用户名。从那里,你做你需要的。使用对所有内容具有完全访问权限的一个存储帐户访问您的存储。

    另一个身份验证选项是 OAuth,它允许他们向像谷歌这样的人进行身份验证 - 你永远不会得到密码 - 只是一个来自谷歌的令牌,让你知道他们已经过身份验证并且他们就是他们声称的身份。例如,堆栈溢出就是这样工作的。

    【讨论】:

    • 所以,如果我做对了...对于典型的用户登录,他们将输入他们的电子邮件/密码,然后将其发送到设置了该服务的服务器。从那里,它将与 CloudAnt 通信以验证他们的登录信息,这会将请求返回给服务,而服务又将返回给应用程序。尽管如此,这意味着云服务 URL 需要存储在应用程序中。什么可以阻止某人直接访问该 URL?
    • Web 服务通常会对用户进行身份验证(不要自己编写)。使用 SSL 的基本身份验证是典型的。然后,在该服务上下文 API 中,您可以访问用户名。从那里,你做你需要的。使用对所有内容具有完全访问权限的一个存储帐户访问您的存储。
    • 另一个身份验证选项是 OAuth,它允许他们向像谷歌这样的人进行身份验证 - 你永远不会得到密码 - 只是一个来自谷歌的令牌,让你知道他们已经过身份验证并且他们就是他们声称的身份。例如,这就是堆栈溢出的工作原理。
    • 好建议!我一直在看link,它有一些好主意。我已经按照帖子指南编写了概念证明,但是使用 Google 或 Amazon 进行身份验证会更好吗?我听说过很多关于 OAuth(主要来自 Twitter)的信息,所以我认为可能应该这样做。对不起我的无知!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多