在哪里存储密码,在 PHP 代码或 iOS 应用程序代码中?

Posted

技术标签:

【中文标题】在哪里存储密码,在 PHP 代码或 iOS 应用程序代码中?【英文标题】:Where to store password, in PHP code or iOS app code? 【发布时间】:2013-11-10 22:02:33 【问题描述】:

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

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

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

【问题讨论】:

php 代码。另一个想法很疯狂 别忘了还有Security.SE 正如其他人所说:绝对是在 php 代码中。 【参考方案1】:

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

md5('supersecretkey' . 'asd123')

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

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

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

这是一个非常简单的思考方式的例子,实际上有人仍然可以反编译 iOS 应用程序并获取字符串,这取决于你认为人们会尝试多少逆向工程,无论你是什么正在写。

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

发布新应用并不是更新客户端信息的唯一方式。 我同意将密码存储在服务器上。 但是任何人都知道 PHP 页面可以使用它,因此弄乱了我的数据库 ---- 如何解决这部分问题?任何快速/简单的解决方案? 了解如何不搞砸服务器端。你认为“他们”会怎样弄乱你的数据库? @TonyXu 保护网络界面的滥用是一个完全独立的问题,应该单独提出。某种客户端证书身份验证可能是一种解决方案。【参考方案3】:

但是任何人都知道 PHP 页面可以使用它,因此会搞砸 我的分贝。 ... URL 中的密码不安全,iOS 应用程序中的密码处于越狱状态 设备也不安全。

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

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

【讨论】:

以上是关于在哪里存储密码,在 PHP 代码或 iOS 应用程序代码中?的主要内容,如果未能解决你的问题,请参考以下文章

ios的离子在哪里存储json文件?

将帐户存储到密码和帐户(iOS 设置)

我的应用程序需要发送电子邮件,我应该在哪里以及如何存储 SMTP 密码?

您将 PHP 脚本配置(如数据库访问数据)存储在哪里?

双向加密:我需要存储可以检索的密码

双向加密:我需要存储可以检索的密码