不确定这是否与代码完全相关,但至少,它与某些编程/安全相关。
我有一个iPhone移动应用程序,它从我的服务器发送/检索信息,后者使用PHP查询数据库。毫不奇怪,数据库需要用户名和密码。我的问题是我应该将凭证放在我的PHP代码或我的iOS应用程序代码中。 如果放入PHP页面,好的是它在服务器上,没有人可以查看PHP代码并获取密码,但是任何人都知道PHP页面可以使用它并因此弄乱我的数据库。 如果放入应用程序代码(通过参数将密码传递给PHP),好的是PHP页面不会起作用,除非通过参数传递密码,但是我认为有一些缺点:URL中的密码不是iOS应用程序中的安全和密码也不安全。
我知道一点,但不知道如何在iOS应用程序代码中散列我的密码,并在将其传递给PHP之前。
答案 0 :(得分:1)
您是否因为需要更改数据库的用户名或密码而要发布iOS应用更新?不是每个人都会更新。
您的iOS应用甚至不知道该网站背后有数据库。
绝对将数据库密码放在服务器上。
答案 1 :(得分:1)
有很多方法可以做到这一点,我最近也做过类似的应用程序。首先,凭据应该绝对在服务器上。你应该做的是使用某种哈希。 iOS应用程序基于几个东西生成哈希,一个不好的例子是
md5('supersecretkey' . 'asd123')
第一个键是PHP代码和iOS代码,第二个是随机生成的。因此应用程序调用脚本如下:
script.php?hash=1a79a4d60de6718e8e5b326e338ae533&key=asd123
该脚本使用密钥和密钥执行上述功能,它现在知道它必须是生成它的iOS应用程序。
这是一种思考它的一种非常简单的例子,实际上有人可能只是反编译iOS应用程序并得到字符串,这取决于你认为人们将尝试和反向工程的程度。正在写作。
答案 2 :(得分:0)
但是任何人都知道PHP页面可以使用它,因此搞砸了 我的数据库。 ... URL中的密码不安全,而且iOS应用程序中的密码是jail-brake 设备也不安全。
这些都不应被视为可接受的解决方案,因为您依赖所有用户在两种情况下都表现良好。您绝对不应该通过将您的数据库凭据包含在您的客户端中来信任您的用户。此外,您不应该相信您的用户只提供格式良好且有效的输入,这些输入不会“弄乱”您的数据库。
您应该对来自客户的任何请求执行授权和有效性检查,以验证请求用户是否有权发出请求或更改,并且他们所做的任何更改似乎都是合理的。无论凭据存储在何处,您都不应该尊重丢弃数据库的请求,覆盖您的高分列表,获取属于其他用户的数据,像其他玩家一样移动,或者客户可以要求的任何其他内容,除非这些是实际允许的操作。你正在建设的系统。