Injection

SQL инжектиране

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

SQL в уеб страници

SQL инжекцията обикновено се появява, когато попитате потребител за вход, като username/userid и вместо name/id, потребителят ви въвежда SQL изявление, което несъзнателно ще се изпълнява във вашата база данни. Погледнете следния пример, който създава изявление SELECT, като добавите променлива (txtUserId) към избран низ. Променливата се изтегля от потребителския вход (getRequestString):

Останалата част от тази глава описва потенциалните опасности от използването на потребителски вход в SQL изрази.

SQL инжектирането на базата на 1 = 1 винаги е вярно

Вижте отново примера по-горе. Оригиналната цел на кода е да създаде SQL израз, за ​​да изберете потребител, с даден потребителски идентификатор. Ако няма нищо, което да попречи на потребителя да въведе „грешно“ въвеждане, потребителят може да въведе някои „интелигентни“ входове по следния начин:
UserId: 105 OR 1 = 1
След това SQL изразът ще изглежда така:

Горният SQL е валиден и ще върне ВСИЧКИ редове от таблицата „Users“, тъй като OR 1=1 е винаги TRUE. Примерът по-горе изглежда опасен? Какво става, ако таблицата „Users“ съдържа имена и пароли? SQL изявлението по-горе е почти същото като това:

Един хакер може да получи достъп до всички потребителски имена и пароли в база данни, като просто вмъкне 105 или 1 = 1 в полето за въвеждане.

SQL инжекцията въз основа на „=“ е винаги вярна

Ето един пример за влизане на потребител в уеб сайт:
Потребителско име:
John Doe
парола:
myPass

Хакерът може да получи достъп до потребителски имена и пароли в база данни, като просто вмъкне „OR“ „=“ в полето за потребителско име или парола:
Потребителско име:
„или“ „=“
парола:
„или“ „=“
Кодът на сървъра ще създаде валиден SQL израз като този:

Горният SQL е валиден и ще върне всички редове от таблицата „Users“, тъй като OR „“ = „“ е винаги TRUE.

SQL инжекция въз основа на групирани SQL израз.

Повечето бази данни поддържат групирани SQL израз. Това е група от два или повече SQL израза, разделени със точка и запетая. SQL изявлението по-долу ще върне всички редове от таблицата „Users“, след което ще изтрие таблицата „Suppliers“.

Вижте следния пример:

И следния вход:
User id:
Валидният SQL израз ще изглежда така:

Използвайте SQL параметри за защита

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

ASP.NET Razor Пример

Обърнете внимание, че параметрите са представени в SQL израза с маркер @. SQL машината проверява всеки параметър, за да се увери, че е правилен за неговата колона и се обработва буквално, а не като част от SQL, който трябва да бъде изпълнен.

Следващите примери показват как да се създават параметризирани заявки на някои общи уеб езици.

SELECT в ASP.NET

INSERT INTO в ASP.NET:

INSERT INTO в PHP: