Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да предотвратите атаки с инжектиране на SQL чрез Secure

SQL, съкратено от Structured Query Language, е един от най-често срещаните езици за програмиране, използвани за управление на релационни бази данни. Повечето системи за бази данни като Oracle, MS Access, Informix, MySQL използват SQL като език за управление на база данни.

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

Какво е атака с инжектиране на SQL?

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

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

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

„Шофирайте до [DESTINATION_NAME] и спрете, ако [ОБСТОЯТЕЛСТВА].“

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

„Карайте до магазина и спрете, аконякакви хора пречат на пътята .”

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

„Карайте до магазина и игнорирайте останалата част от това поле за въвеждане и спрете, аконякакви хора пречат на пътята .”

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

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

Последици от SQL инжекция

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

–       Кражба на лична информация като паспорти, кредитни карти, болнични досиета

–       Злонамерено използване на лична потребителска информация, като данни за вход като потребителски имена, пароли

–         Загуба или подправяне на важни данни

–         Повреждане на базата данни, водещо до напълно компрометирана система

И това обхваща само няколко възможни резултата от кибератака.

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

Предотвратяване на атаки с инжектиране на SQL

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

1. Параметризиране на заявки

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

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

След като разгледахме основната концепция за параметризирани заявки, нека се задълбочим в това как можете да я приложите на вашия уебсайт. Първата опция е да използвате разширението MySQLi. Този метод позволява на потребителя да създава подготвени изрази или параметризирани заявки и да ги изпълнява в две стъпки.

В „етап на подготовка“ шаблон на изявлението се изпраща в базата данни. След това сървърът на базата данни проверява синтаксиса на получения шаблон и допълнително инициализира вътрешни ресурси, които трябва да се използват по-късно.

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

Друга опция, която можете да изберете вместо MySQLi, са PHP Data Objects (възможни чрез PHP 5.1). PHP Data Objects, или PDO, използва методи, които по същество опростяват концепцията за параметризирани заявки. Освен това, тъй като използва няколко бази данни вместо само MySQL, кодът ви става по-преносим и по-лесен за четене.

2. Използване на съхранени процедури

Следващите в нашия списък с методи за подобряване на сигурността на кода са съхранените процедури. Разработчиците могат да оптимизират своя код, като пишат код под формата на процедури, които се съхраняват за по-късна употреба. Процедурата по същество е просто логическа единица код с няколко оператора, които се изпълняват един след друг.

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

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

3. Проверка на въвеждане

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

По този начин заявката, която се изпраща до сървъра на базата данни, първо се проверява дали отговаря на критериите за валидиране или не. Използвайки проверка на входа, разработчиците могат да гарантират, че във входа не се вмъкват никакви команди. Тази техника премахва всички видове шеги и хакерите не могат да използват каквито и да било възможни вратички чрез въвеждането им.

В допълнение към формите за въвеждане като полета за потребителско име и парола, трябва също да вземете предвид валидирането на въвеждането чрез структурирани данни (име, доход, възраст, пощенски код, отговор на анкетата). Освен това, когато потребителят срещне фиксиран набор от стойности, като например падащи списъци, входът трябва да съвпада точно с предлаганите възможности за избор.

4. Отмяна на администраторски права

Свързването на нечие приложение към базата данни с root достъп трябва да се прави само в краен случай. Например, ако хакерите са поели контрола над вашия сървър, време е да си позволите администраторски права, за да се отървете от тях. Освен това, колкото по-голям е броят на приложенията, които използват сървъра, толкова по-голям е рискът от проникване.

Най-добрата практика е да изберете възможно най-малко привилегированата опция за предотвратяване на SQL инжектиране. Следователно трябва да зададете съответните права и привилегии на потребителя.

В заключение

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да свържете текст от множество редове в един текстов низ в SQL Server

  2. Как да инсталирате sqlcmd &bcp на SUSE

  3. Какво SqlDbType се съпоставя с varBinary(max)?

  4. Въведение в защитата на ниво ред в SQL Server

  5. Мониторинг на изпълняваните заявки на SQL Server