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

Ami*_*neG 45 security iphone ipad ios

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

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

==>数据盗窃威胁

并且:

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

==>收入损失威胁

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

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

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

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

对于#2我认为使用基于免费应用程序的商业模式,然后使用商店收据验证的应用程序购买可以是最小收入损失的模型.

您的安全最佳实践是什么,以及最大限度地减少应用程序黑客攻击机会的最佳方法?

Rob*_*ier 67

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

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

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

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

  • 使用内置API来存储东西.随着Apple提高安全性,您可以免费获得优惠.
  • 避免存储敏感信息,并尽量减少存储的敏感度.
  • 验证与之通信的服务.

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

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

将iPhone应用程序的https加密安全保护到网页

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

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

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

正如他们所说,有一些基本的东西是值得的,可以保持诚实的人诚实(有些在各种相关的讨论中讨论过).但是,不要在清醒的夜晚担心如何挫败海盗.躺着醒来担心如何让客户惊叹不已.

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

  • 你永远不会让这个问题消失; 你的真正目标是使损失成为可接受的净百分比.把它想象为入店行窃并相应地对待它.(如果Kwiki-Mart绝对确定没有人可以购物,那么没有人会想在那里购物.)也就是说,为了帮助解决这个问题,如果可能的话,将收入与人而不是设备联系起来.然后验证此人,而不是软件.然后监视不适当的用户行为并关闭帐户.这基本上就是WoW模型.但是从不在实施上花费更多而不是实际损失. (5认同)
  • 这里还有一个侧面说明:在这种情况下,存在针对您的财务DoS的危险.有人故意淹没你的系统,以便让你花费无限的钱.您应该做的第一件事是与您的第三方提供商合作以减轻这种情况.至少,在恶意使用的情况下,对您的损失设置某种上限.和他们谈谈它; 你是*他们的*客户.除此之外,我建议正常的DoS保护.从单一来源寻找洪水,如果超过合理的限制(并向其他人寻呼)等,则将其切断. (2认同)

Sul*_*han 7

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

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

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


小智 5

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

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

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

2什么是减少收入损失和减少黑客暴露的最佳方法?

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

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

  • "钥匙串数据可以轻松转储"不是没有用户的PIN /密码. (2认同)