Согласно этому отчёту, можно выполнить 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
Виртуальный выделенный сервер (VDS) становится отличным выбором