Какво е SQL инжекция?

Един от най-големите класове уеб уязвимости е известен като „SQL инжекция“ или SQLi. Структурираният език за заявки, известен още като SQL, е език, използван за взаимодействие с повечето бази данни, въпреки че се използват редица варианти на езика в зависимост от базата данни платформа. Всеки уебсайт, който съхранява потребителски данни, като информация за акаунта, или предоставя функционалност за качване на потребители, като уебсайт за хостинг на изображения, ще използва база данни за съхраняване на тези данни.

Съвет: SQL обикновено се произнася или „ess cue ell“ или „sequel“, като първата опция е по-често срещана в британския английски, а втората по-разпространена в американския английски. И двете произношения обикновено се разбират в контекста на разговорите за бази данни.

Какво е SQLi?

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

Експлойтите обикновено се въртят около това, че съществуващите изрази са верни при всякакви обстоятелства или предоставянето на втора групирана команда, която изпълнява конкретно действие, като изтриване или показване на всички данни. Например SQL израз за влизане в уебсайт може да провери дали подаденото потребителско име и парола съвпадат с запис в базата данни. За да се опитате да получите достъп, експлойт за инжектиране на SQL може да се опита да добави клауза „или истина“, като „или 1=1“. Това ще направи командата по реда на „влезте с [това] потребителско име, ако паролата е [това] или това твърдение е вярно“.

Как да предотвратим SQLi

SQLi беше много често срещан начин уебсайтовете да разрушат базата си и след това да изтекат онлайн. Благодарение на съгласуваните усилия да се гарантира, че осведомеността за сигурността е част от обучението на разработчиците, този клас уязвимост до голяма степен е разрешен и вече рядко се среща.

Правилният метод за предотвратяване на SQLi е да се използват подготвени изрази, известни също като параметризирани заявки. Традиционно SQL операторите се декларират и въвеждат потребителски данни, свързани с тях по време на тази декларация. С подготвени изрази, командата на базата данни се изписва и след това функция sperate изпълнява командата и вмъква потребителски данни. Въпреки че това може да изглежда като малка разлика, тя напълно променя начина, по който се обработва командата. Разликата предотвратява изпълнението на всякакви значими SQL команди и третира цялото въведено от потребителя като низ, предотвратявайки извършването на SQL инжектиране.