React Nativeで機密データを保存する
質問
私はReact Nativeアプリケーションを構築しており、トークンやリフレッシュトークンのようないくつかの機密データを保存する必要があります。明白な解決策は、その情報を使用して保存することです AsyncStorage . 問題は、AsyncStorageのセキュリティレベルです。
AsyncStorageはトークンやデータをローカルに保存する方法を提供します。これは これは、ある意味では LocalStorage オプションと比較されます。完全な アプリケーションでは、AsyncStorage に直接アクセスせず、抽象化レイヤーを使用することをお勧めします。 に直接アクセスせず、抽象化レイヤーを使用することをお勧めします。 同じブラウザを使用する他のアプリケーションと共有されるためです。 ストレージからすべてのアイテムを誤って削除すると、近隣のアプリの機能が損なわれる可能性があるためです。 そのため、ストレージからすべてのアイテムを誤って削除すると、近隣のアプリの機能が損なわれる可能性があります。
https://auth0.com/blog/adding-authentication-to-react-native-using-jwt/
ネイティブアプリの場合、私なら
Keychain
で
iOS
と
Shared Preferences
で
プライベートモード
で
Android
.
React Nativeが提供するドキュメントで読んだ分。
iOS では、AsyncStorage はネイティブ コードによってバックアップされ、小さな値はシリアライズされた辞書に、大きな値は個別のファイルに保存されます。 をシリアライズされた辞書に、より大きな値を個別のファイルに保存するネイティブ コードによって支えられています。Android では Android では、AsyncStorage は RocksDB または SQLite のいずれかを使用し、使用可能なものに基づいています。 を使用します。
https://facebook.github.io/react-native/docs/asyncstorage.html
そのデータの安全性については一切語られない。
のモジュールを作成するのが最良の解決策です。
Android
(これは
Shared Preferences
で
プライベートモード
) と、もうひとつは
iOS
(これは
キーチェーン
を使用したもの)を使用して、センシブルデータを保存することができますか?それとも、安全なのは
AsyncStorage
メソッドを使用するのが安全ですか?
どのように解決するのですか?
React Nativeのコードを掘り下げるだけで、答えが見つかりました。
アンドロイド
は
React Native
AsyncStorage
モジュールの実装は
SQLiteOpenHelper
.
すべてのデータクラスが扱われるパッケージです。
https://github.com/facebook/react-native/tree/master/ReactAndroid/src/main/java/com/facebook/react/modules/storage
データベースを作成するための手順が書かれたクラスです。 https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/java/com/facebook/react/modules/storage/ReactDatabaseSupplier.java
Androidのドキュメントによると、アプリケーションで作成されたデータベースは、アプリケーションに関連するプライベートなディスクスペースに保存されるので、安全です。
デバイスの内部ストレージに保存するファイルと同じです。 Android は、アプリケーションに関連付けられたプライベート ディスク領域にデータベースを保存します。 アプリケーションに関連付けられたプライベートなディスク領域にデータベースを保存します。デフォルトでは、この領域は他のアプリケーションからアクセスできないため、データは安全です。 他のアプリケーションからはアクセスできません。
iOS
iOS では
AsyncStorage
の値は、シリアライズされた辞書ファイルに保存されます。これらのファイルは、アプリケーションの
NSDocumentDirectory
. iOS では、すべてのアプリケーションは
独自のサンドボックス
そのため、あるアプリケーションのファイルはすべて保護され、他のアプリケーションからアクセスすることはできません。
を処理する iOS のコードは
AsyncStorage
モジュールを処理するコードは、ここにあります。
https://github.com/facebook/react-native/blob/master/React/Modules/RCTAsyncLocalStorage.m
そして、見ての通り
は
によって保存された値を保存するために使用されるファイルです。
AsyncStorage
の下に保存されます。
NSDocumentDirectory
(の下に保存されます(アプリケーションのサンドボックス環境内)。
すべてのアプリは島である iOS アプリのファイル システムとのやり取りは、アプリのサンドボックス内のディレクトリにほぼ限定されます。 は、ほとんどアプリのサンドボックス内のディレクトリに制限されます。新しいアプリのインストール時に 新しいアプリのインストール時に、インストーラはアプリのためにいくつかの コンテナを作成します。それぞれのコンテナには、特定の役割があります。バンドル コンテナにはアプリのバンドルが格納され、データコンテナにはアプリとユーザーの両方のデータが格納されます。 データコンテナは、アプリケーションとユーザーの両方のデータを保持します。データコンテナは、さらに データコンテナは、さらにいくつかのディレクトリに分割され、アプリがデータの並べ替えや整理に使用することができます。 データコンテナはさらにいくつかのディレクトリに分割され、アプリがデータの並べ替えや整理に使用できます。また、アプリは追加のコンテナへのアクセスも要求できます。 また、アプリは実行時に追加のコンテナ(たとえば iCloud コンテナ)へのアクセスを要求することもできます。
結論
安全に使用できる
AsyncStorage
を使ってユーザトークンを保存することは安全です。なぜなら、ユーザトークンは安全なコンテキストで保存されるからです。
がない Android デバイスにのみ当てはまることに注意してください。 ルート を持たないiOSデバイスの場合のみです。 脱獄 . また、攻撃者が 物理的アクセス があり、デバイスが保護されていない場合。攻撃者はデバイスをMacのラップトップに接続し ドキュメントを抽出することができます。 ディレクトリを展開し、ドキュメント ディレクトリの下に保存されたすべてのコンテンツを見ることができます。
関連
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] react-nativeでキーボードを隠す
-
[解決済み] Android Studio - あいまいなメソッド呼び出し getClass()
-
[解決済み] バイト配列の画像ファイルをビットマップに変換するには?
-
[解決済み] XMLで矩形を描画できますか?
-
[解決済み] 文字サイズとアンドロイドの画面サイズの違い
-
[解決済み] 複数のフィルタを持つBroadcastReceiverか、複数のBroadcastReceiverか?
-
[解決済み] Android端末がHDPI画面かMDPI画面かを確認する方法は?
-
[解決済み] Android APKファイルの中身を見るには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] handler.postDelayed()を停止する。
-
[解決済み] 「KotlinとAndroidで「パラメータTを推測するのに十分な情報がありません。
-
[解決済み] XMLで矩形を描画できますか?
-
[解決済み] データベースでリサイクルビューを使用する
-
[解決済み] フラグメント間の値の受け渡し方法
-
[解決済み] react nativeアプリのバージョン番号を更新する方法
-
[解決済み] キャンバスに複数行のテキストを描画する
-
[解決済み] Androidでツールバーの戻るボタンの色を変えるには?
-
[解決済み] 実行に失敗しました app:processDebugResources Android Studio