AndroidアプリにおけるDBファイルの正しい使い方(1/2):CodeZine(情報元のブックマーク数)

なかなか面白い記事。SQLiteデータベースの作成方法からみるパーミッションの問題

Androidアプリケーションを作成する上でSQLiteを使用してデータベースを扱うことは多々あります。データの永続化や検索といった処理を容易に実装することができるので、多くのアプリケーションで使用されています。しかし、AndroidにはSQLiteを使用するための方法が以下のようにいくつか用意され、それぞれファイル作成時のパーミッションの挙動が異なっています。

SQLiteDatabase#openOrCreateDatabaseを使用して作成する
Context#openOrCreateDatabaseを使用して作成する
SQLiteOpenHelperクラスを使用して作成する
もし、開発者がこれら方法の挙動を十分に理解していない場合、知らずのうちに脆弱性を作り込んでしまいます。

実際に、いくつかのアプリケーションではSQLiteDatabase#openOrCreateDatabaseを起因とするファイルパーミッションに関する脆弱性が発見されています。

Androidのアプリケーションは、基本的に他のアプリケーションで管理されているファイルにはアクセスできません。しかし、方法によっては他のアプリケーションからもアクセスできるファイルが作成されてしまいます。今回はこれらDBファイルを作成する方法について、それぞれDBファイルのパーミッションはどのようになっているのか、その挙動について解説します。

AndroidアプリにおけるDBファイルの正しい使い方 (1/2):CodeZine(コードジン)

特別な理由がない限り、ファイルを作成する場合は以下の2点に留意してください。

Context#openOrCreateDatabaseを使用し、MODE_PRIVATEを指定してDBファイルを作成する
SQLiteOpenHelperクラスを使用してデータベースを扱う
これらいずれかの方法でDBファイルへのアクセスを制限する必要があります。なお、Javaセキュアコーディングスタンダードにはファイルのパーミッションについて対応するルールがあります。

AndroidアプリにおけるDBファイルの正しい使い方 (2/2):CodeZine(コードジン)

screenshot