Согласно этому отчёту, можно выполнить SQL injection через User-Agent. Хотелось бы понять, как это работает, и каким образом обезопаситься от подобного рода атак?
User-Agent сверяется с базой данных командой вроде вот такой:
cursor.execute("""
SELECT *
FROM log
WHERE user_agent = '{}'
""".format(user_agent))
Имеем User-Agent:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87'XOR(if(now()=sysdate(),sleep(5*5),0))OR'
При этом получаем SQL команду:
SELECT *
FROM log
WHERE user_agent = 'Mozilla/5.0...'XOR(if(now()=sysdate(),sleep(5*5),0))OR''
Профит.
Рабочий пример на SQLFiddle
Обезопаситься можно использованием параметрических запросов:
cursor.execute("""
SELECT *
FROM log
WHERE user_agent = ?
""", user_agent)
Примеры кода - на Python
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок