web-dev-qa-db-ja.com

Android SharedPreference security

共有設定セキュリティについて疑問に思います。

共有設定がMODE_PRIV(0)で作成された場合でも、共有設定にアクセスできますか?
利用可能なすべての共有設定を一覧表示して、他のアプリからすべての設定を取得することは可能ですか?
sharedpreferencesは、パスワードや認証トークンなどの機密データを置くのに適していますか?

ありがとう

102
Marek Sebera

共有設定は、デバイス上のファイルシステムにファイルとして保存されます。デフォルトでは、ファイルシステムのアクセス許可が設定されたアプリのデータディレクトリ内に保存され、特定のアプリケーションが実行するUIDのみにアクセスできます。 Linux/Unixシステムと同様に、Linuxファイルのアクセス許可によってアクセスが制限されるため、これらはプライベートです。

Rootはファイルシステム上のすべてにアクセスできるため、デバイスにrootレベルでアクセスできるユーザーは誰でもそれらを見ることができます。また、作成アプリと同じUIDで実行されるアプリケーションはそれらにアクセスできます(これは通常行われず、2つのアプリを同じUIDで実行するために特定のアクションを実行する必要があるため、これはおそらく大きくありません懸念)。最後に、誰かがインストールされたAndroid OSを使用せずにデバイスのファイルシステムをマウントできた場合、アクセスを制限する許可をバイパスすることもできます。

設定(またはアプリケーションによって書き込まれたデータ)へのそのようなアクセスが心配な場合は、暗号化することをお勧めします。あなたがそれらについて心配している場合、あなたはあなたが見るリスクのレベルにどれだけの保護が必要であるかを正確に把握する必要があるでしょう。これについては、 Android Platform のアプリケーションセキュリティ、2011年12月に公開されたばかりの(免責事項) :私はこの本の著者です)。

216
user121356

SharedPreferencesは、電話の/ data/data /フォルダーにあるXMLファイルに過ぎないため、ルート化されたデバイスでスーパーユーザー権限を持つアプリケーションまたはユーザーは、MODE_PRIVで作成された場合でもSharedPreferencesにアクセスできます。

それでも誰からもそれを保護する方法があります...このリンクをチェックしてください。ここでは、暗号化された状態でデータを保存できます。クラスは自明であり、非常に使いやすいです。

https://github.com/sveinungkb/encrypted-userprefs

他の人が言ったように、誰でもアクセスできますが、この場合、暗号化されているため、内部のデータを読み取ることはできません。 Utmostセキュリティでは、ハードコーディングするのではなく、実行時に暗号化に使用するキーを生成することをお勧めします。それを行うには多くの方法があります:)

24
Jazz Haque

通常、他のアプリからアクセスすることはできませんが、SharedPreferencesはXMLファイルとして/data/data/ディレクトリに保存されることに注意してください。つまり、any application with スーパーユーザー権限ルート化デバイスcanMODE_PRIVで作成された場合でも、SharedPreferencesにアクセスします

13
aviraldg

MODE_PRIV(0)で作成された場合でも、共有設定にアクセスできますか?

コードなし。ただし、スーパーユーザー特権がある場合は、アプリケーションファイルを取得できます。

利用可能なすべての共有設定を一覧表示して、他のアプリからすべての設定を取得することは可能ですか?

スーパーユーザー(ルート化されたデバイス)の場合、アプリのすべてのプライベートファイルをプルできます。

sharedpreferencesは、パスワードや認証トークンなどの機密データを置くのに適していますか?

いいえ。簡単にハッキングできます。共有プリフレンスファイルに機密データを入れたい場合は、データを暗号化して保存できます。暗号化キーをNDK /サーバーに保存できます。

2
Rajiv Ranjan