Безопасно ли асинхронное хранилище React Native?

Я хочу хранить конфиденциальные данные локально в приложении React Native.

Доступны ли данные только для приложения, которое его написало?

9 ответов

AsyncStorage не подходит для хранения конфиденциальной информации. Вы можете найти это полезным: https://github.com/oblador/react-native-keychain

Для хранения зашифрованных данных используется скрытое хранилище ключей Android / Android. SharedPreferences (Android) и связка ключей на iOS. (Я соавтор библиотеки). Обязательно прочитайте весь файл readme, чтобы понять, что он предлагает.

Нет, это небезопасно, так как не зашифровано. Я бы порекомендовал вам использовать SecureStore Expo

Если вы создаете свое приложение из Expo:

// in managed apps:
import { SecureStore } from 'expo';

Если вы строите как голое приложение

// in bare apps:
import * as SecureStore from 'expo-secure-store';

Подробнее читайте здесь: https://docs.expo.io/versions/v32.0.0/sdk/securestore/

Нет, AsyncStorage не является безопасным для конфиденциальных данных. AsyncStorage просто сохраняет данные в документы на жестком диске телефона, и поэтому каждый, кто имеет доступ к файловой системе телефона, может прочитать эти данные. Конечно, является ли это проблематичным для вас, зависит от того, что вы подразумеваете под "чувствительными данными".

По крайней мере на iOS, правда, что данные доступны только приложению, которое их написало, из-за политики песочницы Apple. Это не мешает взломанным iPhone с корневым доступом к файловой системе получать все, что они хотят, поскольку AsyncStorage не шифрует какие-либо свои данные. Но в общем случае не сохраняйте конфиденциальные данные в AsyncStorage, по той же причине, по которой вам не следует жестко кодировать конфиденциальные данные в вашем коде javascript, поскольку их можно легко декомпилировать и читать.

Для очень чувствительных данных приложения или пользователя вы можете попробовать что-то вроде https://github.com/oblador/react-native-keychain на iOS(использует связку ключей iOS) или https://github.com/classapp/react-native-sensitive-info как для Android, так и для iOS(используется общая настройка Android и связка ключей iOS).

Оба они имеют очень свободный API и простой способ связи с react-native link и являются более безопасным способом сохранения данных, которые вы хотите держать подальше от посторонних глаз.

Нет, это не безопасно. Попробуйте использовать библиотеку, например https://github.com/oblador/react-native-keychain для безопасного хранения.

Если вы используете Expo, вы можете использовать Expo.SecureStore для шифрования и безопасного хранения пар ключ-значение локально на устройстве. Документация: https://docs.expo.io/versions/latest/sdk/securestore

Я столкнулся с той же проблемой в проекте, над которым работал, мы использовали специальную оболочку для AsyncStorage, сохранили некоторое количество данных, а затем мы попытались извлечь те же данные... и это было так просто.

Мы решили эту проблему, используя Realm с опцией шифрования, и это было более простое, быстрое и лучшее решение, чем AsyncStorage.

Я создал безопасный модуль хранения для redux-persist, который использует react-native-keychain хранить ключ шифрования и использует CryptoJS для шифрования избыточного хранилища в состоянии покоя в AsyncStorage. Вы можете найти модуль по адресу:

перевождите-упорствовать шифрованный Асинхр-хранилище

Его использование обсуждается в readme по ссылке.

Из оригинального документа - https://facebook.github.io/react-native/docs/asyncstorage.html

AsyncStorage - это простая, незашифрованная, асинхронная, постоянная система хранения ключей и значений, которая является глобальной для приложения.

Он небезопасен, так как хранит пары ключ-значение в незашифрованном виде на устройстве.

Он использовал связку ключей для iOS и KeyStore для Android для безопасного хранения данных.

Если вы все еще ищете этот.
попробуйте использовать react-native-encrypted-storageу них есть шифрование.
react-native-encrypted-storage
это так просто, как асинхронное хранилище

Другие вопросы по тегам