Не делать
sql = "SELECT * FROM user WHERE id=%s" % (id,) cursor.execute(sql)
Делать
sql = "SELECT * FROM user WHERE id=%s" cur.execute(sql, (id,))
Используя этот синтаксис, аргументы сбежаются (Эти аргументы передаются параметрам на mogrify
Метод https://github.com/pymysql/pymysql/blob/master/pymysql/cursors.py#l161 а потом _escape_args
https://github.com/pymysql/pymysql/blob/master/pymysql/cursors.py#l109 Несомненно
Суть:
Док/Связанный
- Escape String Python для MySQL (Stackoverflow): https://stackoverflow.com/a/27575399/3693616
- Mogrify: https://www.complose.com/articles/formatted-sql-in-python-with-psycopgs-mogrify/
Оригинал: “https://dev.to/romainnorberg/python-avoid-sql-injection-when-using-mysqlcursor-execute-4dn0”