2016-09-06 4 views
0

rawQuery(sql, selectionArgs)文書を確認すると、私はselectionArgsエスケープに関する明示的な声明は表示されません。SQLiteDatabase#rawQueryはselectionArgsをエスケープしますか(安全です)?

先にselectionArgsをサニタイズする必要がありますか、またはrawgetがselectionArgsの値を安全に使用して、SQLインジェクションを回避すると想定するのは安全ですか?

私はAndroid API 14+の実装に興味があり、古い1.xおよび2.x ROMのセキュリティバグは気にしません。

(私が最初String sqlパラメータの話ではない、1つは明らかに脆弱に見えますが、私は引数を消毒することを期待する、まだdeveloper.android.comにそれについてはドキュメントがありません)

答えて

4

セレクションargsはsqliteのvariable bindingを使用しており、決してSQL自体の一部ではありません。消毒は必要ありません。


Android documentationは、実際にここで誤解を招くさ:

をあなたはselectionArgsからの値に置き換えられますクエリ、中where句で? Sを含むことができます。値は文字列としてバインドされます。

最初の文は、文字列の置換が実際に行われていない間に何らかの並べ替えが行われたことを示します。後者の文章は、正しい(可変)綴りを指し、それに対しては例えば、 SQLiteProgrambindAllArgsAsStrings()SQLiteDatabaseとsqlite C APIの間にあります。

関連する問題