@Edge226

Как передать данные без кавычек в execute() безопасно, чтобы предотвратить SQL-инъекции (PyMySql)?

Тут такая ситуация. На сколько я понял, если я буду напрямую в SQL запрос вставлять в строку данные, это может привести к SQL инъекциям. Для его предотвращения нужно использовать параметризованные запросы, например:
cur.execute("SELECT * FROM users WHERE name = %s AND age = %s", (name, age))

но из этого рождается другая проблема. Мне нужно передать название таблицы, но синтаксис SQL не позволяет его мне передать через параметризованные запросы, так как ставятся кавычки.
cur.execute("SELECT * FROM %s WHERE name = %s AND age = %s", (table, name, age))

И из этого созрел вопрос, что мне делать в этом случае? Помогите пожалуйста.
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
Fernus
@Fernus
Техник - Механик :)
https://stackoverflow.com/questions/54113887/place...

P.S.: Я бы проверял через "белый список" допустимые таблицы...независимо от экранирования в запросе...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev
software engineer
sql escape string для твоего языка программирования

например для php
https://www.php.net/manual/en/function.mysql-real-...

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы