如何保护iOS应用程序

安全性是软件开发的关键方面。 几乎每个移动应用程序都处理用户信息或与远程服务器通信。 尽管安全性在过去几十年中已得到显着改善,但它仍然是一个备受争议的话题。

在本文中,我想强调一些与安全性和移动开发相关的主题。 在此过程中,我将介绍一些最佳实践和建议,这些建议可能对保护编写的应用程序很有用。

安全与隐私

安全性是相对的。 定期发现并修补安全漏洞。 没有什么是完美的。 也就是说,您可以采取许多措施来提高移动应用程序的安全性。 防盗者不愿意闯入被电围栏包围的建筑物。

一些开发人员忽略了他们的应用程序用户信任他们的信息这一事实。 作为开发人员,您有责任确保该信息的安全。 信息是什么都无关紧要。 尽管这些信息对您而言似乎并不重要,但对用户而言很重要。

苹果非常重视安全性和隐私权。 HealthKit是Apple致力于保护用户隐私的一个很好的例子。 用户决定应用程序可以访问哪些健康数据。 虽然应用程序可以请求访问用户的健康数据,但HealthKit不会告诉它可以访问哪些数据。 换句话说,Apple认为应用程序的授权状态是它不应该知道的敏感信息。

1.储存资料

您的应用程序应该存储数据吗

在决定如何或在何处存储特定数据之前,您需要问自己是否应该首先存储该数据。 例如,是否有可能将数据保留在内存中,而不是将其写入磁盘或将其发送到远程服务器? 这可以大大简化应用程序的体系结构并提高其安全性。

您应该在哪里存储数据

如果您决定仅在本地存储数据,则需要确定计划将数据存储在何处。 对于敏感信息(例如凭据),钥匙串是您的最佳选择。 这仅适用于应用程序不需要频繁访问的少量数据。

是否需要将数据备份到iCloud或iTunes? 如果不是这种情况,那么您可能要考虑将数据存储在应用程序沙箱的Caches目录中。 此目录未备份到iCloud和iTunes。 为什么这么重要? 不存在的数据不能被破坏。

钥匙扣

可通过NSUserDefaults类访问的默认系统是一种存储数据块的快速便捷的方法。 不幸的是,默认系统经常被开发人员过度使用。 敏感信息(例如凭据和访问令牌)存储在默认系统中的情况经常发生。

系统的钥匙串是存储小块敏感信息的更好的位置。 顾名思义,它的设计考虑了安全性,并且已经存在很多年了。 即使钥匙串由操作系统管理,默认情况下,其他应用程序也无权访问您的应用程序存储在钥匙串中的项目。

确实,访问钥匙串服务的接口是古老的。 幸运的是,有几个出色的库克服了这一障碍。 例如, Lockbox是用于与系统的钥匙串服务进行交互的轻量级库。 密码箱的界面易于使用和理解。

密钥,令牌,凭证

将密钥,令牌甚至凭证存储在易于访问的位置(例如目标的Info.plist或应用程序包中的JSON文件)很诱人。 事实是,从从App Store下载的应用程序中提取信息是孩子的事。 通过将Web服务的API令牌存储在应用程序的Info.plist中 ,其他开发人员可以找到并使用它。

2.网络

应用程式传输安全性

安全和隐私已被列入苹果公司多年的议程,与其他主要公司一样,苹果公司也决定以身作则。 在去年的WWDC期间,该公司推出了App Transport Security

借助App Transport Security,Apple旨在提高其平台以及在其上运行的应用程序的安全性。 无论苹果在保护操作系统上投入了多少资金,一个系统的安全性仅是其最薄弱的组成部分,其中包括第三方应用程序。

App Transport Security强制应用程序通过安全连接发送网络请求。 如果为应用程序启用了“应用程序传输安全性”,则默认情况下,网络请求是通过HTTPS发送的。 Apple通过为使用Xcode 7构建的应用程序自动启用App Transport Security来强调其对安全性和隐私的承诺。

您可以在Envato Tuts +上阅读有关App Transport Security的更多信息。 禁用App Transport Security很容易,但是请记住,App Transport Security的目标之一是使开发人员考虑其应用程序的网络行为。

我在跟谁说话

实际上,每个移动应用程序都使用网络。 这意味着意图不佳的人会大量关注应用程序安全性的这一方面。 网络是一件复杂的事情,应用程序基于大量技术来获取他们感兴趣的数据。

作为开发人员,您必须遵循许多最佳实践,这很关键。 我们已经讨论了App Transport Security和这项新技术强制执行的规则。 但是,它并不止于此。 您可能还需要研究更高级的主题,例如证书固定,以确保您的应用程序正在与之通信的服务器没有欺诈性。 诸如Alamofire之类的现代图书馆使这一工作变得更加容易。

3.敏感信息

用户数据

大多数应用程序使用或存储敏感的用户信息。 移动设备可以访问范围广泛的,通常是个人和敏感的用户信息,例如位置,地址簿和健康信息。

正如我在本文前面提到的那样,您需要问自己的第一个问题是是否需要访问此信息,更重要的是,是否需要存储该信息。

如果您可以通过本机框架(例如HealthKit)访问所需的信息,则无需复制和存储该信息。 例如,Apple将拒绝在iCloud中存储用户健康信息的应用程序。

保持本地

假设您需要存储一些敏感信息,请考虑是否应将该信息保留在本地。 是否有必要将敏感信息发送到远程服务器?

存储敏感信息带有警告。 如果您存储敏感信息的服务器受到威胁,您可能有责任将该信息暴露给其他方。

证书

在过去的几十年中,在线安全有了巨大的发展。 身份验证协议(例如OAuth )使与Web服务的通信更加安全和透明。

如果您的应用程序需要与安全服务器通信,请考虑您的应用程序如何管理凭据。 它是将它们保留在内存中还是将其存储在磁盘上? 如果您要求用户的用户名和密码来获取访问令牌,则可以存储该访问令牌。 但是,您还应该存储用户名和密码吗? 在大多数情况下,答案是否定的。

对于处理非常敏感的数据(例如健康状况或财务信息)的应用程序,最好将访问令牌保存在内存中,而不是将其存储在磁盘上。 将其保存在内存中可以使其更加安全,从而减少应用程序的负担。 无论如何,访问令牌的生存期很短。

结论

应用程序的安全性是软件开发的基本方面。 考虑您的应用程序可以访问哪些数据以及是否应存储该信息。 如果您决定存储敏感信息,请牢记上述提示和最佳做法。 确保尊重您的用户信息。 即使这些信息对您来说似乎并不重要,对用户也很重要。

翻译自: https://code.tutsplus.com/articles/how-to-secure-an-ios-app--cms-26533

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值