SQLiteDatabase#rawQuery 是否转义了 selectionArgs(安全吗)?

Does SQLiteDatabase#rawQuery escape the selectionArgs (is it safe)?

查看 rawQuery(sql, selectionArgs) 文档,我没有看到任何关于 selectionArgs 转义的明确声明。

所以我应该提前清理 selectionArgs,还是假设 rawQuery 将以安全的方式使用任何 selectionArgs 值,避免 SQL 注入是否安全?

我对 Android API 14+ 实现感兴趣,我不关心旧 1.x 和 2.x ROM 中的任何安全漏洞。

(我不是在谈论第一个 String sql 参数,它看起来显然很脆弱,但我希望 args 被清除,但 developer.android.com 上没有关于它的文档)

选择参数使用 sqlite 的 variable binding,它们从来不是 SQL 本身的一部分。无需消毒。


这里的Android documentation实际上是误导:

You may include ?s in where clause in the query, which will be replaced by the values from selectionArgs. The values will be bound as Strings.

第一句话表示发生了某种字符串替换,而实际上并没有进行字符串替换。后一句指的是正确的(变量)绑定,例如SQLiteProgram 及其在 SQLiteDatabase 和 sqlite C API 之间的 bindAllArgsAsStrings()