iOS应用程序安全性的最佳实践

在考虑iPhone / iPad应用程序的安全性时,我可以注意到有:

  • 广泛使用的黑客工具允许文件系统访问
  • networking拦截,男子在中间进攻

==>数据盗窃威胁

并且:

  • 黑客工具的可用性,允许与朋友/社区自由共享付费应用程序(见Cydia)
  • 黑客工具的可用性,允许进入应用程序购买而不付钱(在Cydia中看到,并听说它不适用于任何应用程序)

==>收入损失的威胁

所以我想知道#1 什么是在iOS应用程序中获得更好的安全性的最佳实践? 此外,#2 什么是减less收入损失和减less黑客入侵的最佳途径

对于#1我见过一些有关安全的WWDC幻灯片1 2 3 4 + 苹果文档

我可以说这些最佳实践之间有:

  • 使用提供数据保护的API(如带有NSFileProtectionKey属性的NSFileManager)
  • 使用钥匙串
  • 使用SSL保护敏感数据并使用证书

对于#2我认为,使用基于免费应用程序的商业模式,然后在应用程序购买与存储收据validation可以是最小的收入损失的模型。

什么是安全性的最佳实践,并最大程度地减less应用程序黑客机会?

#1在iOS应用程序中获得更好的安全性的最佳实践是什么?

适当的数据安全性高度依赖于信息的性质。 是长寿还是短命? 这是一个可以用来打开其他东西或单个数据的通用证书吗? 潜在的损失隐私,财务或安全? 确定适当的保护需要一个具体的案例,并没有一般的答案。 但你要求最佳实践,有几个。 没有一个是完美的或不可破解的。 但他们是最好的做法。 这里有几个:

  • 将敏感信息存储在钥匙串中
  • 尽可能将数据保护设置为NSFileProtectionComplete
  • 不要存储您实际上不需要的敏感数据,也不要超过您的需要。
  • 存储应用程序特定的身份validation令牌而不是密码。
  • 使用HTTPS来validation您正在联系的服务器。 切勿接受无效或不可信的证书。
  • 连接到您自己的服务器时,validation该服务是否提供了已签名的证书,而不仅仅是“可信证书”。

这只是一小步的方法,但它们确立了基本的基调:

  • 使用内置的API来存储事物。 由于苹果提高了安全性,您可以免费获得这些好处。
  • 避免存储敏感信息,并尽量减less您存储的敏感性。
  • validation您与之通信的服务。

#2减less收入损失和减less黑客攻击的最佳方法是什么?

这已经在SO上多次讨论过了。 这个答案包括几个其他讨论的链接:

将iPhone应用程序的httpsencryption保护到网页

简短的回答是:担心你的客户,而不是你的非客户。 许多海盗永远不会付钱给你,所以你的时间和金钱最好花在帮助你的实际客户想要付钱给你,并使他们容易这样做。 专注于赚取更多的钱,而不是保护自己从不可能拥有的金钱。 从来没有,勾选付费客户在努力惩罚一个不付费的客户。 复仇是一个骗子的游戏,浪费资源。

有两种避免盗版的好方法:

  • 不要发布。
  • 发布垃圾没人愿意。

你可以做一些基本的事情,正如他们所说,保持诚实的人是诚实的(有些是在各种相关的讨论中讨论的)。 但是,不要沉睡的晚上担心如何挫败海盗。 让我们担心如何惊叹你的客户。

永远记住:苹果花费比我们大多数人在我们的生活中见过的更多的钱,试图保护iPhone。 仍然是越狱。 想想你的预算会达到什么。

当攻击者获得对设备的物理访问(例如盗窃)时,他几乎可以做任何事情。 请注意,阅读应用程序文件非常容易。 被盗设备可以轻松越狱,攻击者甚至可以访问受保护的文件。

我的build议是将敏感数据存储到设备上:

  1. 不要这样做,如果他们可以存储在安全的服务器上
  2. 使用您自己的encryption,在用户login时解密,在注销时或在一段时间后应用程序在后台时删除解密的文件。
  3. 每个密码和encryption密钥都必须存储在钥匙串中。

Rob Napier提到了好点。 但为了使它更安全,

1什么是在iOS应用程序中获得更好安全性的最佳实践?

  1. 将encryption格式的敏感信息存储在Keychain中。
    • 物理访问设备的钥匙串数据可以轻松转储。
  2. 设置适当的数据保护类(NSFileProtectionComplete最好)。
  3. 始终使用自定义encryption以及内置的API来存储数据。
    • 即使黑客发现内置API的漏洞,您的应用程序也是安全的。
  4. 在删除之前写入临时存储的数据。
    • 取证技术可以用来恢复已删除的数据。
  5. 使用HTTPS和证书locking。 切勿接受不受信任的证书。
  6. 将重要的plist,sqlite等…文件存储在Library / caches文件夹中。
    • 存储在caching文件夹中的文件不能用iTunes进行备份。
  7. 始终使用最新的XCode构build应用程序。
    • 仅添加对最新SSL密码的支持

2什么是减less收入损失和减less黑客攻击的最佳途径?

要阻止盗版是不可能的,但是我们可以让它变得艰难。

  1. 防止应用程序在越狱设备上运行(请三思,您可能会失去有效的客户)
    • 添加检测越狱存在的代码
  2. 阻止应用程序附加到debugging器
    • 从AppStore下载的应用程序被encryption。 debugging器用于解密和分析应用程序。 添加检测debugging器的代码。

这取决于你做什么。 至于访问一个API,你真正需要做的是散列和/或盐用户信息,然后将信息(如果有必要的话)保存在钥匙串中(可以通过在将密码推入钥匙串之前encryption密码来增加额外的安全性)最好不要使用NSUserDefaults作为input的数据存储在iPhone文件系统的.txt文件中,正如你所说的,它可以被黑客访问。