-1

不确定这是否完全与代码相关,但至少,它在某种程度上与编程/安全相关。

我有一个 iPhone 移动应用程序,它向/从我的服务器发送/检索信息,它使用 PHP 来查询数据库。毫不奇怪,数据库需要用户名和密码。我的问题是我应该将凭证放在我的 PHP 代码或 iOS 应用程序代码中。如果放入 PHP 页面,好在它在服务器上,没有人可以查看 PHP 代码并获取密码,但是任何人都知道 PHP 页面可以使用它,因此会弄乱我的数据库。如果放入应用程序代码(通过参数将密码传递给PHP),好的是除非通过参数传递密码,否则PHP页面将无法运行,但我认为有几个缺点:URL中的密码不安全并且越狱设备中的 iOS 应用程序中的密码也不安全。

我知道一点但没有太多专业知识的方法是在 iOS 应用程序代码中对我的密码进行哈希处理,然后再将其传递给 PHP。

4

3 回答 3

1

您是否仅仅因为需要更改数据库的用户名或密码而发布对 iOS 应用程序的更新?不是每个人都会更新。

你的 iOS 应用程序甚至不应该知道网站背后有一个数据库。

一定要把数据库密码放在服务器上。

于 2013-11-10T22:06:54.447 回答
1

有很多方法可以做到这一点,我最近自己也做了一个类似的应用程序。首先,凭据绝对应该存在于服务器上。你应该做的是使用某种哈希。iOS 应用程序根据几件事生成哈希,一个不好的例子是

md5('supersecretkey' . 'asd123')

第一个键在 PHP 代码和 iOS 代码中,第二个是随机生成的。所以应用程序像这样调用脚本:

script.php?hash=1a79a4d60de6718e8e5b326e338ae533&key=asd123

该脚本使用密钥和密钥执行上述功能,它现在知道它一定是生成它的 iOS 应用程序。

这是一种思考方式的非常简单的示例,实际上有人仍然可以反编译 iOS 应用程序并获取字符串,这取决于您认为人们会尝试多少对您正在编写的内容进行逆向工程。

于 2013-11-10T22:09:16.207 回答
0

但是任何人都知道 PHP 页面可以使用它,因此会弄乱我的数据库。... URL 中的密码不安全,越狱设备中 iOS 应用程序中的密码也不安全。

这些都不应被视为可接受的解决方案,因为您依赖所有用户在这两种情况下都表现良好。您绝对不应该通过将您的用户包含在您的客户端中来信任您的用户和您的数据库凭据。此外,您不应该相信您的用户只提供格式正确且有效的输入,而不会“弄乱”您的数据库。

您应该对来自客户的任何请求执行授权和有效性检查,以验证请求用户是否有权提出该请求或更改,并且他们所做的任何更改似乎都是合理的。无论凭据存储在何处,您都不应接受删除数据库、覆盖您的高分列表、获取属于其他用户的数据、以其他玩家身份进行移动或任何其他客户可能要求的请求,除非这些操作实际上是允许的操作您正在构建的系统。

于 2013-11-10T22:31:07.900 回答