Android静态安全检查(十二):内部SQLite存储风险

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010889616/article/details/80962441

内部SQLite存储风险简介

内部SQLite指/data/data/包名/databases/路径下的文件,openOrCreateDatabase方法可以对该路径下的数据进行读写操作。

    /**
     * Open a new private SQLiteDatabase associated with this Context's
     * application package.  Create the database file if it doesn't exist.
     *
     * @param name The name (unique in the application package) of the database.
     * @param mode Operating mode.  Use 0 or {@link #MODE_PRIVATE} for the
     *     default operation, {@link #MODE_WORLD_READABLE}
     *     and {@link #MODE_WORLD_WRITEABLE} to control permissions.
     *     Use {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead logging by default.
     * @param factory An optional factory class that is called to instantiate a
     *     cursor when query is called.
     *
     * @return The contents of a newly created database with the given name.
     * @throws android.database.sqlite.SQLiteException if the database file could not be opened.
     *
     * @see #MODE_PRIVATE
     * @see #MODE_WORLD_READABLE
     * @see #MODE_WORLD_WRITEABLE
     * @see #MODE_ENABLE_WRITE_AHEAD_LOGGING
     * @see #deleteDatabase
     */
    public abstract SQLiteDatabase openOrCreateDatabase(String name,
            int mode, CursorFactory factory);

方法的第二个参数是权限,默认是MODE_PRIVATE

  • Mode为MODE_PRIVATE或者MODE_APPEND时,其他程序无法对该文件进行操作。
  • Mode为MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE时,其他应用可以读写该文件

如果权限设置为MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE,则该文件可以被其他应用访问,可能会导致敏感信息泄露和数据被篡改。

检测方法

检测调用ContextWrapper类的openOrCreateDatabase方法和Context类的openOrCreateDatabase方法地方,检查第二个参数Mode,判断是否是MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE,如果是这两个权限,则认为该应用数据存在被第三方应用读取和篡改风险。

修复方案

调用openOrCreateDatabase方法存储数据,将数据库权限设置为MODE_PRIVATE或者MODE_APPEND,或者使用默认值。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页