SQL-injection через User-Agent

200
14 декабря 2020, 18:20

Согласно этому отчёту, можно выполнить SQL injection через User-Agent. Хотелось бы понять, как это работает, и каким образом обезопаситься от подобного рода атак?

Answer 1

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

READ ALSO
Как вернуть данные от php после ajax запроса

Как вернуть данные от php после ajax запроса

Как вывести результат ajax запроса в alert?

135
Обратный слеш в json_decode

Обратный слеш в json_decode

Есть текст(из БД), который нужно превратить в jsonпример

129
Не меняется title в заголовке страницы bitrix

Не меняется title в заголовке страницы bitrix

Прошу помощиrequire($_SERVER["DOCUMENT_ROOT"]

133