2013-08-09 2 views
0

Я работаю над приложением, которое имеет несколько запросов дб вставки/обновления и по всему приложению я использоваландроид SQLiteDatabase.insert против ExecuteSQL

SQLiteDatabase.insert(String table, String nullColumnHack, ContentValues values) 

метод для вставки любых данных в любой таблице. Я имею в виду, что я создаю объект ContentValues ​​и ставил все мои значения в качестве пары ключ/значение внутри этого объекта и передавал его этому методу.

contentValues.put("col1", valueCol1); 
contentValues.put("col2", valueCol2); 
contentValues.put("col3", valueCol3); 

Так что просто хотел проверить, если этот способ вставки записей в таблицу SQLite лучше или лучше использовать ExecuteSQL [С точки зрения SQLinjection]. Я понимаю в соответствии с документацией здесь

[http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#execSQL(java.lang.String)][1] 

что рекомендуется использовать вставку для execSQL. Но это более подвержено SQLInjections, если оно вообще есть. Любые входы/предложения.

ответ

1

Как было предложено на странице, что вы связаны

«Вместо этого, вы рекомендуется использовать вставку (String, String, ContentValues), обновление (String, ContentValues, String, String []), et al, когда возможно. "

вы должны использовать insert() если возможно.

Чтобы избежать запросов на SQL-запрос, вам необходимо четко определить между оператором SQL и данными, которые он содержит. Методы query(), update() и delete() ContentProvider и способ управляемого процесса ActivityQuery() управляют всеми параметрами поддержки. Все эти методы принимают параметр «String [] selectionArgs», набор значений, которые получают вместо строки «?» Вместо строки «?», В порядке появляются вопросительные знаки. Это обеспечивает четкое разделение между содержимым инструкции SQL в параметре «выбор» и включенными данными. [Мобильные приложения Безопасность]

Так, insert() метод, как update() или delete() должна быть SQL-инъекция бесплатно.

Вы должны всегда использовать параметризованные методы запросов, поддерживаемые Content Provider:

При обращении к поставщику контента, использовать параметризованные методы запроса , такие как запрос(), обновление() и удалить(), чтобы избежать потенциальный SQL Впрыск из ненадежных источников. Обратите внимание, что использование параметризованных методов не является достаточным, если аргумент выбора построен по , объединяя данные пользователя перед отправкой его методу.

ссылка here

+0

Спасибо Иосиф за ваш ответ. – Deva

+0

Это отмечено в конце, но все же ... они не автоматически «без sql-инъекций», но вам нужно их правильно использовать (статический запрос и параметры входят только в массив параметров). – domen

Смежные вопросы