如何只允许从我的 iOS 应用程序访问我的 MySQL 数据库? (使用 webapp 作为 db 的网关)

Posted

技术标签:

【中文标题】如何只允许从我的 iOS 应用程序访问我的 MySQL 数据库? (使用 webapp 作为 db 的网关)【英文标题】:How do I only allow access to my MySQL database from my iOS app? (Using webapp as gateway to db) 【发布时间】:2013-08-23 04:44:46 【问题描述】:

我的 ios 应用需要连接到 mysql 服务器。为此,我想创建一个 webapp,充当客户端应用程序和服务器端数据库之间的中间人。

我担心的是,有人可以简单地找出我的应用程序使用的 URL 并传递他们自己的 URL 参数 - 因为 web 应用程序不知道是否从我的 iOS 应用程序发送了合法数据,而有人只是输入了正确的来自任何网络浏览器的精心制作的 URL,系统将容易受到攻击。

假设我有一个 php 函数用于将用户标记为“已验证”(在我向他们发送电子邮件验证码之后)。这是非常标准的东西,但是是什么阻止了某人从网络浏览器发出相同的请求?

当然,应用程序用来进行数据库查询的用户将拥有有限的权限,因此数据库的其余部分不会有风险。但是,即使让用户从应用程序外部激活他们的帐户也将是灾难性的。

我想到的选项是使用 https,这样即使用户知道 URL,他们也不会知道密码并且无法嗅探它,因为它从头到尾都是加密的。不幸的是,https 对于一个贫穷的大学生来说可能很昂贵,所以如果有的话,我想要一个替代方案。

【问题讨论】:

让我们看看,您有一个应用程序将 HTTP 请求发送到 PHP 后端,对吧?那么从技术上讲,保护您的 php 免受应用程序外部(或被劫持的版本)的攻击是不可能的。 SSL 将是防止第三方从真实用户那里嗅探凭据或会话令牌的好选择。在会话 id 的周期性再生之后,对于那些通过邪恶手段抓取/猜测有效会话 id 的人来说,事情会变得很烦人。使用技术对抗CSRF 也可能有助于清除自动注册机器人。 SSL 可能是个好主意,但不要只依赖于您的接口(应用程序)发送有效数据。在将用户输入投入查询之前,进行适当的验证和转义(最好使用 PDO 或 mysqli 驱动程序)。 (有关相关主题,请参阅我的 answer 的最后两部分) 显然,一个专门的黑客不应该有太多麻烦来记忆编辑 iOS 应用程序或嗅探/编辑 http 数据包,从而使应用程序约束/验证无用。 (虽然我没有 iOS 黑客经验) 【参考方案1】:

如前所述,没有 100 % 的安全性是可能的。但是有几种解决方案放在一起可以提供很大的安全性。

https

正如您所指出的,这是一个重要的部分,因为它可以防止嗅探。

会话

使用会话并且不允许任何没有有效会话的请求(除了第一个,它必须对应用进行身份验证)。

指纹

检查用户代理并设置额外的 http 标头,以获得您的应用独有的指纹。 (仍然有人可以嗅探,但他需要使用 curl 或类似的。)

混淆请求

构建您的查询字符串并应用哈希函数。服务器需要实现反向功能。 ?43adbf764Fz 而不是 ?a=1&b=2

加密

这更进一步。使用共享密钥计算哈希。在服务器上重复相同的操作。这已经是很强的安全性了。为了破解,需要对您的应用程序进行逆向工程。

使用唯一的共享密钥

你说它是一个 iOS 应用。安装后,iOS 会生成一个唯一令牌。让您的应用向您的服务器注册此令牌。像这样,你有一个强大的共享秘密,每个安装都是独一无二的,并且没有办法破解你的网络应用程序。

【讨论】:

你摇滚。感谢您的详尽回答!

以上是关于如何只允许从我的 iOS 应用程序访问我的 MySQL 数据库? (使用 webapp 作为 db 的网关)的主要内容,如果未能解决你的问题,请参考以下文章

如何只允许 PHP 从我的服务器下载图像?

如何从我的应用程序访问 google drive api

如何从我的应用程序下载 300k 日志行?

如何确保可以从我的设备网络访问 GCM 服务器?

如何在 iPad 上从我的应用程序访问第三方应用程序?

如何绕过访问控制允许来源?