跳到主要内容
版本:v2

Capacitor 安全最佳实践

每位 Capacitor 开发者都有责任确保其应用遵循安全最佳实践。如果不加以注意,可能会出现重大的安全问题,这可能会造成极大的损害和损失。

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

数据安全

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

避免在代码中嵌入机密

对于 Capacitor 应用以及任何前端应用来说,最重要的安全提示之一是 永远不要 在应用代码中嵌入机密。这意味着确保您的代码绝不包含秘密 API 密钥、加密密钥或任何其他可能通过基本应用分析技术轻易窃取的敏感数据。注意那些可能在构建时将敏感值注入到应用代码中的环境变量插件。

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

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

存储加密密钥、会话 Token 等

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

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

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

认证和深度链接

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

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

这对于 oAuth2 流程尤其重要,其中认证体验的最后一步依赖于指向应用的深度链接。为了减轻恶意应用接收 token 的可能性,在 Capacitor 应用中必须使用 PKCE 进行 oAuth2。

为确保您的 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 等)。

CSP 可以通过在 <head> 中添加一个包含可接受 CSP 格式的 meta 标签来在您的 Capacitor 应用中配置(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 应用安全技术的现有资源。这是 一个很好的入门资源