Как предотвратить атаки SQL инъекций в Android? - PullRequest
0 голосов
/ 02 сентября 2018

, поэтому у меня проблемы со следующим кодом, и мне было интересно, есть ли другой способ создания и удаления таблицы, где имя таблицы берется у пользователя, следующий код выдает ошибку при использовании одинарных кавычек "" ". пожалуйста помогите

public void droptable(String tablename) {
    SQLiteDatabase db =this.getWritableDatabase();
    db.execSQL("DROP TABLE IF EXISTS " + tablename);

}
 public void createtable(String tablename)
{
    SQLiteDatabase db = this.getWritableDatabase();
    String query = String.format("CREATE TABLE IF NOT EXISTS %s ( %s INTEGER PRIMARY KEY AUTOINCREMENT , %s TEXT )",tablename,COLUMN0,COLUMN1);
    db.execSQL(query);
}

есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 02 сентября 2018

Если ваше приложение не будет экспортировать саму базу данных SQLite, когда пользователь намеревается использовать эту базу данных SQLite где-либо еще, пользователь никогда не увидит эту таблицу, кроме как через ваше приложение.

Это дает вам несколько вариантов:

  1. Не используйте введенное пользователем значение для имени таблицы. Вместо этого сгенерируйте правильное имя таблицы самостоятельно и сохраните отображение сгенерированных имен и то, что вводимое пользователем «отображаемое имя» для каждой таблицы.

  2. Преобразуйте введенное пользователем значение в допустимое имя таблицы, удалив неподдерживаемые символы.

  3. Заверните введенное пользователем значение в кавычки ("%s"), хотя тогда у вас будут проблемы, если пользователь введет имя таблицы с кавычкой.

  4. Запретить пользователю вводить недопустимое имя таблицы, отклоняя нестандартные символы как часть вашего EditText

  5. Проверьте введенное пользователем значение и отобразите диалоговое окно с ошибкой, если они введут что-то, что приведет к ошибкам SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...