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

时间:2012-02-25 22:24:37

标签: iphone ios ipad security

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

  • 广泛使用的黑客工具允许文件系统访问
  • 网络拦截,中间人攻击

==>数据盗窃威胁

还有:

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

==>收入损失威胁

所以我想知道#1 在iOS应用程序中获得更好安全性的最佳做法是什么? 此外,#2 减少收入损失和减少黑客攻击的最佳方法是什么?

#p>#1 我见过一些关于安全性的WWDC幻灯片 1 2 3 4 + apple docs

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

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

表示#2 我认为使用基于免费应用程序的商业模式,然后使用商店收据进行应用购买验证可以成为收​​入损失最小的模型。

您的安全最佳做法是什么,以及最大限度地减少应用黑客机会的最佳方式?

5 个答案:

答案 0 :(得分:67)

  

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

适当的数据安全性在很大程度上取决于信息的性质。它是长寿还是短命?它是一种可用于打开其他内容或单个数据的通用凭据吗?潜在的损失是隐私,财务还是安全?确定适当的保护措施需要特定的案例,并且没有一般性的答案。但是你要求最好的做法,有几个。它们都不是完美的或牢不可破的。但它们是最佳实践。以下是一些:

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

这只是一些方法,但它们设定了基调:

  • 使用内置API存储内容。随着Apple提高安全性,您可以免费获得好处。
  • 完全避免存储敏感信息,并尽量降低存储内容的敏感度。
  • 验证与之通信的服务。
  

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

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

Secure https encryption for iPhone app to webpage

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

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

  • 不要发布。
  • 发布没有人想要的垃圾。

你可以做一些基本的事情,正如他们所说,让诚实的人诚实(有些在各种相关的讨论中讨论过)。但是,不要在清醒的夜晚担心如何挫败海盗。躺着醒来担心如何让客户惊讶。

永远记住:苹果花费的钱比我们大多数人在生活中看到的更多钱,试图保护iPhone。它还是越狱了。想想你的预算将会达到什么目标。

答案 1 :(得分:7)

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

我建议将敏感数据存储到设备:

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

答案 2 :(得分:5)

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

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

  1. 在Keychain中以加密格式存储敏感信息。
    • 在物理访问设备时,可以轻松地转储数据链。
  2. 设置适当的数据保护类(最好是NSFileProtectionComplete)。
  3. 始终使用自定义加密和内置API来存储数据。
    • 即使黑客发现内置API存在漏洞,您的应用也是安全的。
  4. 删除前覆盖临时存储的数据。
    • 取证技术可用于恢复已删除的数据。
  5. 使用HTTPS和证书固定。永远不要接受不受信任的证书。
  6. 将重要的plist,sqlite等文件存储在Library / caches文件夹中。
    • 存储在caches文件夹中的文件不会使用iTunes进行备份。
  7. 始终使用最新的XCode构建应用程序。
    • 仅为最新的SSL密码添加支持
  8. 2减少收入损失和减少黑客暴露的最佳方法是什么?

    可能无法阻止盗版,但我们可以使其变得艰难。

    1. 阻止应用在Jailbroken设备上运行(三思而后行,您可能会失去有效客户)
      • 添加检测Jailbreak存在的代码
    2. 阻止应用程序附加到调试程序
      • 从AppStore下载的应用程序已加密。调试器用于解密和分析App。添加检测调试器的代码。

答案 3 :(得分:2)

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

答案 4 :(得分:0)

添加更多内容以提高应用程序的安全性

  • 请勿使用HTTP GET发送参数,而应使用HTTP POST。
  • 您可以进行SSL固定以避免MITM攻击。
  • 在移至生产之前,从源中删除所有日志。
  • 请勿在应用程序本身中对加密密钥进行硬编码,最好将其保存在远程位置。
  • 发出请求时,请始终使用最新的SSL版本(TLSv1.2)。
  • 如果您的应用程序具有WebView,请当心链接注入。如果您不希望WebView中的URL是HTTP以外的其他URL,请检查所有带有前缀“ http”的重定向URL,以使加载的网站不允许打开其他链接。
  • 您可以选择允许或阻止键盘扩展,因为它们会监听您的所有击键。