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议是将敏感数据存储到设备上:
- 不要这样做,如果他们可以存储在安全的服务器上
- 使用您自己的encryption,在用户login时解密,在注销时或在一段时间后应用程序在后台时删除解密的文件。
- 每个密码和encryption密钥都必须存储在钥匙串中。
Rob Napier提到了好点。 但为了使它更安全,
1什么是在iOS应用程序中获得更好安全性的最佳实践?
- 将encryption格式的敏感信息存储在Keychain中。
- 物理访问设备的钥匙串数据可以轻松转储。
- 设置适当的数据保护类(NSFileProtectionComplete最好)。
- 始终使用自定义encryption以及内置的API来存储数据。
- 即使黑客发现内置API的漏洞,您的应用程序也是安全的。
- 在删除之前写入临时存储的数据。
- 取证技术可以用来恢复已删除的数据。
- 使用HTTPS和证书locking。 切勿接受不受信任的证书。
- 将重要的plist,sqlite等…文件存储在Library / caches文件夹中。
- 存储在caching文件夹中的文件不能用iTunes进行备份。
- 始终使用最新的XCode构build应用程序。
- 仅添加对最新SSL密码的支持
2什么是减less收入损失和减less黑客攻击的最佳途径?
要阻止盗版是不可能的,但是我们可以让它变得艰难。
- 防止应用程序在越狱设备上运行(请三思,您可能会失去有效的客户)
- 添加检测越狱存在的代码
- 阻止应用程序附加到debugging器
- 从AppStore下载的应用程序被encryption。 debugging器用于解密和分析应用程序。 添加检测debugging器的代码。
这取决于你做什么。 至于访问一个API,你真正需要做的是散列和/或盐用户信息,然后将信息(如果有必要的话)保存在钥匙串中(可以通过在将密码推入钥匙串之前encryption密码来增加额外的安全性)最好不要使用NSUserDefaults作为input的数据存储在iPhone文件系统的.txt文件中,正如你所说的,它可以被黑客访问。