SQL-инъекция принимает язык php
Я работаю над отчетом об оценке безопасности приложения php, созданного Accunetix.
В отчете говорится об уязвимости SQL-инъекций. Приложение PHP с MySQL. Вот заголовки, которые, как он говорит, делают атаку (в частности, заголовок accept-language):
GET /user_login.php HTTP/1.1
user-agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
accept-language: 1;select pg_sleep(1); --
X-Requested-With: XMLHttpRequest
Cookie: PHPSESSID=35kno6h8kmkbin973q02gojp82; uniqueuser=1382404387
Host: xxx.xxx.com
Connection: Keep-alive
Accept-Encoding: gzip,deflate
Я не нашел ни слова "accept-language" или "accept_language" в приложении. Также, pg_sleep()
не является функцией MySQL.
Я искал известную уязвимость в PHP и ничего не нашел. Это ложный положительный результат, или я что-то упустил?
2 ответа
Accept-Language
заголовок запроса, отправленный браузером клиента.
Accunetix пытался манипулировать этими заголовками, внедряя вредоносный код, чтобы найти целые системы безопасности (имитирующие хакеров), чтобы проверить, уязвимо ли ваше приложение для них.
Если вы не использовали заголовок accept-language или не запрашивали заголовки в запросах к БД, то, вероятно, это ложное срабатывание. Чтобы убедиться, смотрите ответ на этот запрос, если ответ нормальный, то все в порядке.
Код, вероятно, будет обрабатывать этот заголовок как источник для выбора языка, что делается с помощью запроса к базе данных. И при генерации запроса содержимое заголовка HTTP неправильно анализируется.
Причиной, по которой вы этого не видите, может быть то, что выборка заголовков HTTP выполняется косвенно (как в $_SERVER[$language_header]
).