我的iOS应用程序需要连接到mysql服务器。为此,我想创建一个webapp,充当客户端应用程序和服务器端数据库之间的中间人。
我担心的是,有人可以简单地找出我的应用使用的网址并传递他们自己的网址参数 - 因为网络应用程序不知道是否从我的iOS应用程序发送了合法数据而不是只是正确输入的人从任何网络浏览器制作的URL都会使系统容易受到攻击。
让我们说我有一个PHP功能,用于将用户标记为"已验证" (在我发送电子邮件验证码后)。这是非常标准的东西,但是什么阻止某人从网络浏览器发出相同的请求?
当然,应用程序用于进行数据库查询的用户将拥有有限的权限,因此数据库的其余部分将面临风险。但是,即使让用户从应用程序外部激活帐户也是灾难性的。
我想到的选项是使用https,这样即使用户弄清楚了网址,他们也不会知道密码,因为它已加密,所以无法嗅探密码从开始到结束。不幸的是,对于一个贫穷的大学生来说,https可能会很昂贵,所以如果有的话,我会想要另一种选择。
答案 0 :(得分:6)
如前所述,没有100%的安全性。但是有几种解决方案可以提供很好的安全性。
正如您所指出的,这是一个重要的部分,因为它可以防止嗅探。
使用会话,不允许任何没有有效会话的请求(第一个,必须对应用程序进行身份验证)。
检查用户代理并设置额外的http标头,以获取应用程序的唯一指纹。 (仍然有人可以嗅,但他需要使用卷曲或类似。)
构建查询字符串并应用哈希函数。服务器需要实现反向功能。 ?43adbf764Fz而不是?a = 1& b = 2
这更进了一步。使用共享密钥计算哈希值。在服务器上重复相同的操作。这已经是强大的安全性。为了打破,需要对您的应用进行逆向工程。
你说它是适用于iOS的应用程序。安装后,iOS会生成一个唯一的令牌。让您的应用在服务器上注册此令牌。像这样,每个安装都有一个独特的强大共享密钥,并且无法破解您的Web应用程序。