You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native应用中敏感数据如何安全存储?该选哪种存储方案?

React Native 敏感数据存储的最佳安全方案

首先明确:绝对不能将token、支付信息等敏感数据存在AsyncStorage、redux-store或Android Shared Preferences中,原因如下:

  • redux-store:纯内存存储,App重启后数据丢失,且内存中的数据可通过调试工具轻易读取,完全不具备安全性。
  • AsyncStorage/Shared Preferences:两者本质都是明文存储(iOS对应NSUserDefaults,Android对应SharedPreferences),数据以未加密的形式存在设备文件系统中,只要获取设备权限就能直接读取,风险极高。

最安全的存储方式

React Native中存储敏感数据的最优方案是利用iOS和Android各自的系统级安全存储机制,通过封装好的RN库调用即可:

1. 依赖系统原生安全组件

  • iOS:使用Keychain Services——系统提供的加密存储容器,数据会被自动加密,仅当前App有权限访问,即使设备越狱也能提供一定程度的防护。
  • Android:使用Android Keystore——密钥存储在系统硬件级别的安全区域,无法直接导出,存储数据时用Keystore生成的密钥加密,大幅降低数据泄露风险。

2. React Native 封装库推荐

最常用的是react-native-keychain,它封装了上述原生安全组件,API简单易用:

示例代码

import * as Keychain from 'react-native-keychain';

// 存储敏感数据(如token)
const saveToken = async (token) => {
  try {
    // 以键值对形式存储,这里用"auth_token"作为标识
    await Keychain.setGenericPassword('auth_token', token);
  } catch (error) {
    console.error('Token存储失败:', error);
  }
};

// 获取存储的token
const getToken = async () => {
  try {
    const credentials = await Keychain.getGenericPassword();
    if (credentials && credentials.username === 'auth_token') {
      return credentials.password;
    }
  } catch (error) {
    console.error('Token获取失败:', error);
  }
  return null;
};

// 删除token
const deleteToken = async () => {
  try {
    await Keychain.resetGenericPassword();
  } catch (error) {
    console.error('Token删除失败:', error);
  }
};

额外安全建议

  • 支付信息尽量避免本地存储,优先通过调用支付接口实时传递,减少数据暴露风险;
  • 为敏感数据访问添加生物识别验证(如指纹、面容ID),react-native-keychain支持此功能;
  • 确保设备启用全盘加密功能,进一步提升数据安全性;
  • 禁止在日志中打印敏感数据,避免调试过程中泄露信息;
  • 给token设置合理的有效期,到期自动刷新,降低泄露后的影响范围。

内容的提问来源于stack exchange,提问作者Wissem Kamalet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:30:45