跳到主要内容
版本:v7

Capacitor 安全最佳实践

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

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

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

数据安全

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

避免在代码中嵌入密钥

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

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

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

存储加密密钥、会话 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://。这确保数据永远不会以纯文本形式发送。

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 应用安全技术。这里有一个好资源可以让你开始。