2012-03-30 5 views
0

私はコンテンツプロバイダーでSqlCipherを使用しています。今は、私がキャッシュされたパスワードをクリアするだけでアプリケーションをロックしたいとき。ただし、開いているカーソルを使用してアプリケーションを引き続き使用できます。つまり、アプリを再度開くと、機密データへのアクセスが許可されます。私は、アプリがパスワードを持っていない場合、ログイン画面にリダイレクトすることで、この問題を解決します。SqlCipherオープンカーソルはセキュリティの問題ですか?

しかし、これらの開いているカーソルにセキュリティ上の問題がある場合や、UIのアクセスをブロックし続けても問題ないかと心配していますか? SqlCipherのドキュメントでは、DB全体を解読するのではなく、暗号化されたページを読み書きすると言っているので、開いているカーソルはまだ安全だと思います。

ここでの主な懸念事項は、誰かが電話を紛失し、知識のある個人がこれらのオープンカーソルを使用して機密データを抽出できることです。

答えて

0

カーソルのAndroid実装のSQLCipherの詳細は見ていませんが、通常、Androidカーソルでは結果セット全体がヒープスペースに保持され、SQLCipherの場合はそのポイントで解読されます。

しかし、これらのカーソルはプロセスにとってプライベートなので、UI以外のLinux/Androidプロセスの分離のために、誰もそれらにアクセスする良い方法はありません。あなたのUIが、誰かが再びログイン以外でアクセスすることを許可しない場合、あなたはかなり保護されています。キャッチとは、ユーザーのUIに、ログインをバイパスする意図しないコードパス(最近のタスクリストなど)がなく、データへのアクセスを許可しているかどうかを確認することです。

+0

意図しないコードパスについて。私の最初の試みは、すべての可能なエントリポイント(onCreate、newIntentなど)のチェックを実行し、その安全なアクティビティクラスを拡張するカスタムActivityクラスを作成することでした。これは実際よりも理論的に優れていることが判明しました。今は、各アクティビティクラスの前述のエントリポイントのそれぞれをオーバーライドします。残念なことに、これは私のアプリを繰り返しコードで散らします。どのようにこれをより良い達成するための任意の考えですか?私は、アプリケーションがロックされるたびにアクティビティスタックを削除し、メインアクティビティでのみチェックを実行できますか? – user1178479

+0

@ user1178479: "アプリがロックされるたびにアクティビティスタックを強制終了し、メインアクティビティでのみチェックを実行できますか?" - アプリケーションのロックが明示的な操作である場合、 'startActivity()'を介してロックアクティビティを起動するときに 'FLAG_ACTIVITY_CLEAR_TOP'と' FLAG_ACTIVITY_SINGLE_TOP'を 'Intent'フラグとして使用して他のすべてのアクティビティを破棄することができます。 – CommonsWare

+0

でも可能ですが、マニフェストに最初の投稿からのポイントであった別のアクティビティを起動するインテントフィルタ(action.viewなど)がある場合は、このアプローチを回避することは可能です。私は実際にコントロールを集中管理する唯一の方法は、ロック時にアクティビティスタックをクリアするだけでなく、すべてのインテントが通過するゲートキーパーアクティビティを作成することだと思います。それはそれが価値あるものより多くの仕事であり、マニフェストを役に立たなくするでしょう。 – user1178479

関連する問題