Въведение в SQL инжекция
- SQL инжектирането е уязвимост или техника, която може да унищожи базата данни на уебсайт или уеб приложение. Това е една от най-широко използваните уеб-базирани атаки.
- Основната цел на SQL инжекцията е да получи достъп до базата данни на уебсайт. Така че, за да работи SQL инжекция, човек се нуждае от уеб приложение, което е свързано с база данни.
- Тъй като базата данни съдържа всички данни, включително паролата на администратор, т.е. паролата за влизане на собственика, нападателят на уебсайта може да влезе в администраторската страница, за да редактира уебсайта, като попълни уеб формуляр.
- Уеб-формулярът включва потребителско име и пароли. Когато потребителят въведе нещо в полето за въвеждане на уеб формуляра, SQL SELECT заявката е внедрен в базата данни.
- Системата се опитва да съпостави входовете, т.е. потребителското име и паролата, въведени от потребителя, с потребителското име и паролата, които вече са съхранени в базата данни. Ако и двата входа съвпадат, тогава потребителят получава достъп, в противен случай достъпът ще бъде отказан на потребителя.
- Има определени уебсайтове, които нямат механизма да блокират каквото и да било друго въвеждане. Такива уебсайтове са уязвими към SQL инжектиране. В този случай всяка SQL заявка може да бъде подадена като вход и системата ще я изпълни.
- Например, нападателят може да въведе заявка за изтегляне на цялата база данни, да изтрие базата данни, да промени базата данни и да направи условието винаги вярно. Ако условието за парола е винаги вярно, няма значение дали е въведена парола. За паролата системата има достъп до тези, които се съхраняват в базата данни, но ако се направи заявка за премахване на таблицата с пароли в базата данни, системата ще започне да приема всяка парола. По този начин нападателят може лесно да получи достъп до базата данни. Сега той може да знае всички пароли на хората, влезли в уебсайта, различните таблици и тяхното съдържание, вътрешната структура на уебсайта и всякаква друга информация, свързана с уебсайта.
- Този метод се нарича SQL инжекция, при която инжектирате заявка в базата данни, за да я манипулирате и да получите неоторизиран достъп до нея. Това е най-опасният тип атака на уебсайт за база данни, базирана на SQL.
- Един от начините за предотвратяване на подобни атаки е да блокирате ненужните входове, различни от потребителските имена и пароли.
- Командите за инжектиране на SQL се правят по време на изпълнение. Така че избягвайте динамични команди за въвеждане. Предотвратете базата данни с защитна стена на уеб приложения . Също така, не разкривайте поверителна информация относно уебсайта на никого.
- Уебсайтовете могат да претърпят огромни данни и финансови загуби поради такива SQL атаки.
Пример:
Да предположим, има уеб приложение с свързана към него база данни. Това уеб приложение може да приема данни от потребителя и да съхранява информацията в базата данни или да извлича данните от базата данни и да ги показва на потребителя.
И в двата случая има SQL заявка или заявка за база данни, която се генерира в уеб приложението, което се изпраща към базата данни и тази заявка се изпълнява в базата данни и съответната информация се връща обратно на уеб приложението. Ето как работи нормалният сценарий.
Така че, когато нападателят използва SQL инжекция, той се опитва да манипулира тази заявка за база данни, за да я накара да направи нещо, което в идеалния случай не би трябвало да прави. И така, нападателят променя SQL заявката, манипулира я, той инжектира някакъв злонамерен низ в SQL заявката и след това я кара да направи нещо по неоторизиран начин. Така че сега заявката към базата данни се манипулира от нападателя, след това тази злонамерена заявка се изпраща към базата данни, изпълнява се там и се връщат съответните резултати.
Това е известно като SQL инжекция. SQL инжектирането е техника за инжектиране на код, използвана за изпълнение на злонамерени и динамични SQL изрази. SQL атаките са нещо, което нападателят използва, за да поеме контрола върху сървърите на бази данни.
Как да предотвратим SQL инжектиране
- Избягвайте използването на динамичен SQL
Входовете, предоставени от потребителя, не трябва да се поставят директно в SQL заявката, която ще се управлява в базата данни. Вместо да се използва динамичен SQL, трябва да се използват съхранени процедури, подготвени оператори и параметризирани заявки, тъй като те са по-безопасни в сравнение с динамичните SQL заявки.
- Предоставените от потребителя входове трябва да бъдат дезинфекцирани
Типът данни, които ще бъдат предоставени от потребителя, трябва да бъдат правилно съпоставени и проверени с очаквания тип.
- Чувствителните данни не трябва да са в отворен текст
Преди да съхраните поверителни данни като пароли в базата данни, те трябва да бъдат правилно криптирани с хешове. Осоляването трябва да се приложи към криптираните хешове, за да се осигури допълнителен слой сигурност на поверителните данни.
- Грешките в базата данни не трябва да се показват директно на потребителя
Информацията за грешка, показвана на нападателя, може да му помогне да получи информация за базата данни.