FixVibe
Covered by FixVibecritical

SQL инжекция: Предотвратяване на неоторизиран достъп до база данни

SQL инжектиране (SQLi) е критична уязвимост, при която нападателите се намесват в заявките към базата данни на приложението. Чрез инжектиране на злонамерен SQL синтаксис, атакуващите могат да заобиколят удостоверяването, да видят чувствителни данни като пароли и данни за кредитни карти или дори да компрометират базовия сървър.

CWE-89

Въздействие на SQL инжекцията

SQL инжектиране (SQLi) позволява на атакуващ да се намеси в заявките, които дадено приложение прави към своята база данни [S1]. Основното въздействие включва неоторизиран достъп до чувствителни данни като потребителски пароли, данни за кредитни карти и лична информация [S1].

Освен кражба на данни, нападателите често могат да променят или изтрият записи в базата данни, което води до постоянни промени в поведението на приложението или загуба на данни [S1]. В случаи с висока степен на сериозност SQLi може да бъде ескалиран, за да компрометира задната инфраструктура, да активира атаки за отказ на услуга или да осигури постоянна задна врата в системите на организацията [S1][S2].

Основна причина: Несигурна обработка на въвеждане

Основната причина за SQL инжектиране е неправилното неутрализиране на специални елементи, използвани в SQL команда [S2]. Това се случва, когато приложение конструира SQL заявки чрез конкатениране на външно повлиян вход директно в низа на заявката [S1][S2].

Тъй като входът не е правилно изолиран от структурата на заявката, интерпретаторът на базата данни може да изпълни части от потребителския вход като SQL код, вместо да го третира като буквални данни [S2]. Тази уязвимост може да се прояви в различни части на заявка, включително SELECT изрази, INSERT стойности или UPDATE изрази [S1].

Конкретни корекции и смекчаващи мерки

Използвайте параметризирани заявки

Най-ефективният начин за предотвратяване на SQL инжектиране е използването на параметризирани заявки, известни също като подготвени изрази [S1]. Вместо конкатениране на низове, разработчиците трябва да използват структурирани механизми, които налагат разделянето на данни и код [S2].

Принцип на най-малката привилегия

Приложенията трябва да се свързват с базата данни, като използват най-ниските привилегии, необходими за техните задачи [S2]. Акаунтът на уеб приложение не трябва да има административни привилегии и трябва да бъде ограничен до конкретните таблици или операции, необходими за неговата функция [S2].

Проверка на входа и кодиране

Въпреки че не е заместител на параметризацията, проверката на входа осигурява защита в дълбочина [S2]. Приложенията трябва да използват стратегия за приемане-известно-добра, като потвърждават, че входът съответства на очакваните типове, дължини и формати [S2].

Как FixVibe го тества

FixVibe вече покрива SQL инжектиране чрез затворения модул за скенер active.sqli. Активните сканирания се изпълняват само след проверка и удостоверяване на собствеността върху домейна. Проверката обхожда GET крайни точки от същия произход с параметри на заявката, установява базов отговор, търси специфични за SQL булеви аномалии и отчита констатация само след потвърждение на времето за множество дължини на забавяне. Сканирането на хранилището също помага да се открие основната причина по-рано чрез code.web-app-risk-checklist-backfill, който маркира сурови SQL извиквания, изградени с интерполация на шаблон.