Categories
PHP

Защита срещу SQL инжекции

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

Данни, подавани от потребителя винаги трябва да бъдат валидирани от приложението преди да бъдат използвани в SQL конструкции.

Първата стъпка при защита от SQL инжекции е валидацията на входните данни.

Валидацията представлява проверка дали входните данни, въвеждани от потребителя, отговарят на очакваните данни от приложението.

Пример за валидация е проверка дали потребителското име съдържа само символи от A до Z и цифри от 0 до 9, ако само тези символи са заложени като валидни в приложението при въвеждане на потребителско име.

За проверка може да се използва следният регулярен израз (шаблон) в комбинация с функцията preg_match() в PHP:

If (preg_match("/^[a-z0-9]+$/ui", $username)) {
echo 'потребителското име е валидно';
} else {
echo 'потребителското име не е валидно';
}

Ако функцията върне true, потребителското име е валидно.

Втората стъпка при защитата от SQL инжекции са така наречените готови конструкции (prepared statements). Използването им предотвратява на 100 процента възможността от атакуване с SQL инжекции. Това е така, защото заявките предварително се обработват от MySQL сървъра без да бъдат подавани потребителските данни и злонамереният потребител няма възможност да манипулира SQL конструкцията.