sql инъекция в запросах

Получаю гет запросом логин и отправляю его в sql запрос

    @app.route('/api/login' )
    def login():
    
        login = request.args.get("l")
        with connect(host=host,user=user,password=pa,database=db) as connection:
                select_movies_query = "SELECT * FROM user WHERE login = '" + login + "'"
    
                with connection.cursor() as cursor:
                    cursor.execute(select_movies_query)
                    result = cursor.fetchall()
                    for row in result:
                         print(row)

При данной схеме возникает возможность sql инъекций. Подскажите, какие есть способы,что бы игнорировать ' в запросах


Ответы (1 шт):

Автор решения: MaxU

Используйте связываемые переменные - это обезопасит вас от SQL Injections:

select_movies_query = "SELECT * FROM user WHERE login = %s"
...
cursor.execute(select_movies_query, [login])

Функция cursor.execute(query, parameters) в качестве второго параметра ожидает кортеж или список значений, которые будут подставляться вместо %s в запросе. Подставление делается по порядку - вместо первого %s подставляется первый элемент из parameters и т.д.

NOTE: обратите внимание, что в запросе отсутствуют кавычки вокруг строкового литерала - БД драйвер сам позаботиться об этом.

→ Ссылка