Как защитить операторы SELECT * FROM var1 WHERE var2 от SQLInjection - PullRequest
0 голосов
/ 28 июня 2019

Я создаю веб-сайт в django, где я хочу, чтобы пользователь вставил идентификатор таблицы и идентификатор группы, а затем возвратил таблицу и группу, в которую они вставлены. Однако я нашел только операторы, которые склонны к внедрению SQL. Кто-нибудь знает, как это исправить?

mycursor = mydb.cursor()
qry = "SELECT * from %s WHERE group_id = %i;" % (assembly_name, group_id)

mycursor.execute(qry)

return mycursor.fetchall()

Или сделать что-то такое же?

Я пытался сделать что-то вроде этого:

assembly_id = 'peptides_proteins_000005'
group_id = 5

mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM %s WHERE group_id = %s", [assembly_id, group_id])

myresult = mycursor.fetchall()

но я получаю эту ошибку:

1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''peptides_proteins_000005' WHERE group_id = 5' at line 1

1 Ответ

1 голос
/ 28 июня 2019

Как правило, невозможно связать имена таблиц.Для операторов SELECT самым простым способом является очистка кандидатов на имена таблиц с помощью белого списка.

Проверьте, могут ли накладные расходы на использование абстракции или какой-либо способ ограничения ввода данных пользователем конечным набором допустимых имен в качестве части пользовательского интерфейса.быть оправданным.

...