从iOS App安全访问数据库

Ari*_*osh 22 php mysql sqlite iphone ios

我在浏览MySQL和SQLite之后选择了MySQL进行访问,因为我的iPhone应用程序需要从已经在MySQL中的在线数据库中提取信息.

我相信访问信息的传统方式是:在服务器上有一个php文件,为你进行访问.

iPhone应用程序将调用此php文件,它将返回结果.

iOS应用程序将调用http://somewebsite.com/index.php?id=234,该网站将打印出id = 234的用户名.

在iPhone应用程序的背景中会发生什么

现在,这个过程有多安全?......我显然会使用预备语句和https.但是,如果有人找到了这个网站的URL呢?如何保护自己免受滥用(有人可以生成我所有用户的列表)?这是让您的iPhone应用程序连接并从数据库获取信息的标准方法吗?


编辑:此外,假设我需要创建一个应用程序登录页面...我有一个带有用户名和密码的MySQL数据库(显然是哈希).使用$ _GET变量来查看它们是否经过身份验证是否安全?例如:https://somewebsite.com/checkauth.php?username = test&password = C3LyiJvTCQ14Q并打开php是或否.图片示例如下:

这就是iPhone对用户进行身份验证的方式 这就是iPhone对用户进行身份验证的方式

我认为上述方法不安全......但我需要开悟.

此外,我宁愿远离使用第三方API在应用程序内调用数据库,Apple不支持.

Sam*_*amV 20

解决此问题的最佳方法是设置API以与服务器上的数据库进行交互,并且您的iPhone应用程序只需查询API并以机器可读格式返回数据,例如JSON,请参阅http://en.wikipedia.org/wiki/JSONhttp://json.org/.因此,对于用户登录,服务器可能会返回如下内容:

{
    "result": false,
    "error": "Invalid username or password"
}
Run Code Online (Sandbox Code Playgroud)

这将由PHP生成,代码如下:

echo json_encode(array(
    "result" => false, 
    "error" => "Invalid username or password"
));
Run Code Online (Sandbox Code Playgroud)

另请注意,您应该将HTTP响应代码与此结合使用,例如401用于未经授权.

JSON可以在其格式中使用布尔和其他数据结构.几乎所有主要语言都有支持/库.

这样做的好处是它允许您使用相同的API(如Android版本或实际网站)构建其他应用程序.

SO问题是关于移动应用的安全性一个很好的起点:

为移动应用程序创建API - 身份验证和授权

要点是确保使用HTTPS.通过用户凭据发送时,您可以返回用户令牌(api密钥),该用户令牌可用于将来的请求并存储在iPhone应用程序中以供将来访问.

例如: https://iphoneapp.com/notifications.json?key=98fy92473r92hAAIYEFG397qbqwiuUEAF

您的密钥应该在HTTP标头或POST中发送,因此它不会记录在日志等中......

注意:这只是在键盘上键入的随机字符串.

此方法允许您在密钥泄露时删除/重新生成密钥.您还可以设置键的速率限制和各种其他参数.

另一个巨大的好处是通过构建自己的应用程序使用的API意味着它将保持高标准,而其他第三方公司也可以使用API​​(如果您允许).

编辑:此外,假设我需要创建一个应用程序登录页面...我有一个带有用户名和密码的MySQL数据库(显然是哈希).使用$ _GET变量来查看它们是否经过身份验证是否安全?例如:https: //somewebsite.com/checkauth.php?username = test&password = C3LyiJvTCQ14Q

您应该使用POST发送敏感数据,但任何服务都必须在某个时候登录.使用HTTPS应该最有帮助,因为它可以防止窃听.在第一次身份验证后,您可以返回令牌并获得上述优势.

至于用户登录,因为您的PHP符合良好实践,您应该没有问题.如果您有任何疑问,请访问http://www.phptherightway.com/.

绝对研究OAuth,如果你愿意,可以利用它.

这只是一个起点,并不是逐字逐句使用,需要进一步阅读和谷歌搜索.