4

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

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

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

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

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

4

1 回答 1

6

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

Https

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

会话

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

指纹

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

混淆请求

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

加密

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

使用唯一的共享密钥

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

于 2013-08-23T05:35:25.483 回答