私のアプリにはログインが必要ですが、私にはRemember username and password
機能があります。ユーザー名とパスワードは、
localStorage.setItem('ユーザー名', ユーザー名);
ユーザー名とパスワードを保存するこの方法はどの程度安全ですか? 特に Android で心配しているのは、他のアプリがデータにアクセスしてログイン情報を取得できるかどうかです。
アプリは iOS と Android 用で、私はPhoneGap 2.9
.
私のアプリにはログインが必要ですが、私にはRemember username and password
機能があります。ユーザー名とパスワードは、
localStorage.setItem('ユーザー名', ユーザー名);
ユーザー名とパスワードを保存するこの方法はどの程度安全ですか? 特に Android で心配しているのは、他のアプリがデータにアクセスしてログイン情報を取得できるかどうかです。
アプリは iOS と Android 用で、私はPhoneGap 2.9
.
LocalStorage は通常、アプリからのみアクセスできます。特定のプラットフォーム (iOS、Android) のサンドボックスがアプリのデータを他のアプリに読み取られないように保護できるのと同じくらい安全です。
サンドボックスが期待するほど強力でない場合があります。たとえば、次のような場合です。
攻撃者がクリアテキストのパスワードとユーザー名にアクセスできる場合、(サービスだけでなく) 他のアカウントに対してもそれらを試すことができます。そのため、アプリのユーザーが複数のサービスに同じパスワードを使用した場合、攻撃者はそれらのサービスにもアクセスできるようになります。
パスワード ハッシュの保存についてはどうでしょうか。
サーバー側アプリケーションの場合、これは優れたアイデアです。保護された環境 (アクセス制御のあるデータセンター、セキュリティ アップデートを担当するシステム エンジニア) で実行されるからです。
一方、電話は簡単に盗まれ、ユーザーはセキュリティ更新プログラムをインストールしないか、インストールできないことがよくあります。
ハッシュがソルト化されていない場合、ハッシュを取得していれば、レインボー テーブルを使用してクリアテキスト パスワードを取得するのは非常に簡単です。ハッシュがソルト化されている場合、単純なパスワードの平文パスワードを取得するのは非常に簡単です。また、安全でないパスワード ハッシュを生成するのは非常に簡単です。
解決策:ランダムに生成されたアクセス トークンを保存します。パスワードがどれほど単純であろうと複雑であろうと、トークンを見て平文のパスワードを取得することは不可能です。
TL;DR
ある種の API サービスに対する認証に資格情報を使用している場合は、iOS キーチェーンなどの安全なストアであっても、パスワードとユーザー名をローカルに保存しないでください。
代わりにすべきことは、その API から取得したランダムに生成されたトークン(パスワード ハッシュではありません! ) のみを保存することです (セッション ID をユーザー/パスの組み合わせではなく Cookie に保存するという概念と同様です)。1 つの可能性は、OAuth を使用することです。
そうすれば、サンドボックスがデータを保護できなかったり、電話が盗まれたりした場合でも、実際の資格情報が漏洩することはありません.
各アプリケーションは PhoneGap で独自の webview を使用し、localStorage はその webview でのみアクセスできます。
編集:パスワードのハッシュ化についてはまだ考えています。
localStorage 内にパスワードを保存することは安全な方法ではありません。PhoneGap を使用している場合は、iOS キーチェーン内にユーザー名とパスワードを保存してみてください。このプラグインをご覧ください: https://github.com/shazron/KeychainPlugin