Является ли React Native Async Storage безопасным?

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

От реакции-native doc - https://facebook.github.io/react-native/docs/asyncstorage.html

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

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

Он использовал keychain для iOS и KeyStore для Android для безопасного хранения данных.

Ответ 6

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

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