今天看啥  ›  专栏  ›  哈嘿豆

React Native应用安全问题

哈嘿豆  · 掘金  ·  · 2021-06-04 11:51
阅读 18

React Native应用安全问题

2020 年,全球移动应用程序收入超过 5810 亿美元。根据 Statista 研究部于 2021 年 2 月 4 日发布的调查,到 2023 年,移动应用程序预计将通过付费下载和应用程序内广告产生超过 9350 亿美元的收入。

同时,McAfee Mobile Threat Report 2020 表示,黑客正在利用这种趋势来散布他们的恶意应用程序,这些移动应用会窃取敏感的用户数据。因此,任何致力于开发移动应用程序的人都必须认真考虑安全性问题。

OWASP Mobile Top 10 展示了移动应用程序中最常见的漏洞:

  • M1: Improper Platform Usage 平台使用不当: 此类别涵盖滥用平台功能或不使用平台安全措施,包括错误使用Android intent和平台权限,滥用TouchID 、钥匙串和其他一些平台安全措施。

  • M2: Insecure Data Storage 不安全的数据存储

  • M3: Insecure Communication 不安全的通信

  • M4: Insecure Authentication 不安全的认证

  • M5: Insufficient Cryptography 加密不足

为了降低移动应用发生安全漏洞的可能性,我建议重点关注下面3个主要领域:数据存储、App-Server 通信和身份验证。这里是一些基于React Native安全文档的最佳实践,可用来帮助保护你的React Native应用程序。

React Native安全最佳实践

Data Storage

首先永远不要在代码中存储API key或者密码等敏感信息。其他人可以用文本方式轻松访问app中包含的任何内容。如果你必须使用API key或者密码才能让App访问某些资源,那么最安全的处理方法是在你的App和资源之间构建一个编排层。

在React Native中,有2种存储类型,你需要根据数据的敏感性决定使用哪一种。

Async Storage类似Web Local Storage,信息以未加密的纯文本形式存储,因此你可以用它来存储非敏感数据。

Secure Storage

iOS secure storage

Keychain Services allows you to securely store small chunks of sensitive info for the user. This is an ideal place to store certificates, tokens, passwords, and any other sensitive information that doesn’t belong in Async Storage.

钥匙串(Keychain)服务可以用来安全地存储少量敏感信息,包括证书、令牌、密码和任何其他不适用于Async Storage的敏感数据。

Android secure storage

Android — Secure Shared Preferences

Shared Preferences是Android存储键值数据的服务。Shared Preferences中的数据默认是不加密的,但Encrypted Shared Preferences包装了Shared Preferences类,增加了自动加密功能。

Android — Keystore

Android Keystore系统可以让你将数据加密存储在一个特殊的设备容器中,一般手段是很难从设备容器中提取这些数据的。

App-Server通信

网络安全是开发人员最关心的问题之一,因为应用程序通常需要与后端进行通信,而用户往往是不关心所连接网络的安全性的。

为了提高与后端通信的安全性,这里有一些最佳实践:

  • API应该始终使用 HTTPS 和 TLS(如果可能,请使用最新版本)

  • 使用 SSL pinning技术避免中间人攻击。

Authentication

React Native文档中的建议是使用OAuth2身份验证协议,该协议被认为是最完善和最安全的身份验证协议。我推荐使用react-native-app-auth。React-native-app-auth是一个用于与OAuth2后端通信功能的原生实现SDK。它封装了原生的AppAuth-iOS和AppAuth-Android库,可以支持PKCE。你可以访问他们的页面获得有关此协议的更多信息。

Final recommendations

  • 为了避免平台使用不当 (M1),需要认真按照平台文档实现并遵循最佳编码实践。

  • 如果你需要为应用程序申请权限,请务必按照最小权限原则,以避免申请不必要的权限

Conclusion

React Native是流行高效的App框架之一,通过本文,你现在可以更好地了解App中最常见的漏洞以及如何在React Native中处理安全问题,让你开始减少安全漏洞的可能性并保护你的用户、你的公司声誉以及提高你的应用程序的质量。

References

React Native应用安全问题




原文地址:访问原文地址
快照地址: 访问文章快照