跳到主要内容
版本:v3

Capacitor 安全最佳实践

每位 Capacitor 开发者都有责任确保其应用遵循安全最佳实践。如果缺乏适当关注,可能会出现重大的安全问题,造成极大的损害和高昂的代价。

安全是一个广泛的话题,但 Capacitor 开发者应在多个方面进行安全合规性审查,包括数据安全、身份验证/深度链接、网络安全和 Web View 安全。

Ionic 为 Capacitor 应用提供开箱即用的安全套件,包括身份验证、生物识别和加密。了解更多

数据安全

数据安全涉及本地存储的数据以及在应用代码中的安全性。

避免在代码中嵌入机密信息

对于 Capacitor 应用以及任何前端应用而言,最重要的安全提示之一是_切勿在应用代码中嵌入机密信息_。这意味着确保您的代码中绝不包含秘密的 API 密钥、加密密钥或任何其他可以使用基本应用分析技术轻松窃取的敏感数据。请注意那些可能在构建时向应用代码注入敏感值的环境变量插件。

相反,应将需要密钥或令牌的大多数操作移至服务端,在那里它们可以得到保护,并且任何请求都可以从服务器转发。这可以是 serverless 函数或传统的服务端应用进程。

对于必须在客户端处理持久化敏感密钥或令牌的应用(例如身份验证令牌或加密密钥),推荐的选项是仅在内存中处理该值(即永远不将其持久化到磁盘),或使用下面详述的安全钥匙串/keystore 技术。

存储加密密钥、会话令牌等

现代移动设备和操作系统提供了强大的安全 API 和专用安全硬件,用于在设备上存储敏感值。这就是应用在管理加密密钥或会话令牌等高度敏感值时提供生物识别或安全密码身份验证的方式。

提供此功能的 API 在 iOS Keychain ServicesAndroid Keystore API 中可用。这些 API 复杂且底层,因此您可能希望找到一个为您使用它们的插件(例如这个社区插件 cordova-plugin-ios-keychain)。

对于企业用例,Capacitor 团队提供 Identity Vault,它在这些原生安全 API 之上提供了易于使用的 API 和频繁更新的体验。Identity Vault 可以与其他 Capacitor 企业产品一起使用,如 Offline StorageAuth Connect,以分别提供每个体验的加密密钥或身份验证令牌管理组件。

身份验证和深度链接

原生应用中的身份验证流程需要特别小心,因为身份验证通常通过自定义 URL Scheme 进行。自定义 URL Scheme(例如 instagram://)不像 Web 域名那样被全局控制,因此恶意应用可能通过定义和覆盖自定义 URL Scheme 来拦截本应发往另一个应用的请求。想象一下,一个安全令牌被发送到了错误的应用!

通常,应用不应通过自定义 URL Scheme 深度链接发送敏感数据(较新的技术如 Universal Links 更安全,因为它们依赖于实际的 Web 域名所有权,详细信息请参阅深度链接指南)。

这对于 oAuth2 流程尤为重要,其中身份验证体验的最后一步依赖于回到应用的深度链接。为了减轻恶意应用接收令牌的可能性,在 Capacitor 应用中必须使用 oAuth2 的 PKCE

为确保您的 oAuth2 流程安全,请确保您的插件支持 PKCE。对于企业用例,官方 Auth Connect Capacitor 解决方案完全支持 oAuth2 身份验证流程的 PKCE。

有关更多信息,请参阅这份优秀的 oAuth2 原生应用最佳实践指南。

网络安全

网络安全确保网络请求发送到可信端点并经过加密,以避免以明文形式发送敏感数据(如密码)。

SSL

应用应仅向启用 SSL 的端点发出请求。这意味着永远不要向 http:// 的端点发出请求,而应始终使用 https://。这确保数据永远不会以明文形式发送。

然而,这本身还不够。为了避免可能的中间人攻击,应该固定 SSL 证书,以便只接受已知的证书。这必须在客户端和服务端原生执行。目前,cordova-plugin-advanced-http 插件支持此功能,可能还有其他插件也支持。

Web View 安全

内容安全策略

内容安全策略(CSP)是浏览器(以及您的 Capacitor Web View)中可用的一组安全功能。CSP 可用于限制用户代理允许在 Web View 中加载的资源(例如图片、XHR、视频、Web Socket 等)。

可以通过在 <head> 中添加一个带有可接受 CSP 格式的 meta 标签来在 Capacitor 应用中配置 CSP(CSP 可以在服务端和客户端使用相同的格式配置)。例如,以下配置将允许对当前源和 foo.com 的所有请求:

<meta
http-equiv="Content-Security-Policy"
content="default-src 'self' foo.com"
/>

CSP 支持多种配置,CSP 参考是必读材料。另一个有用的资源是 content-security-policy.com

JavaScript 安全技术

由于 Capacitor 应用的主体是使用 JavaScript 的 Web 应用,因此典型的 JS 安全技术同样适用。

JS 安全超出了本文档的范围,并且已经有大量关于正确 JS 和 Web 应用安全技术的现有资源。这里提供一个很好的资源供您入门。