it-blog.club
SQL инъекция что такое и как спасти данные на сервере

SQL инъекция что такое и как спасти данные на сервере

В наше время уже не обязательно быть программистом, чтобы понимать, что большинство контента который мы видим на страницах сайтов это данные из баз данных которые находятся на сервере. Мы так же знаем, что есть несколько видов баз данных Microsoft SQL Server, Oracle и, та которой больше всего пользуются в вебе, MySQL. Язык, который взаимодействует с БД называется SQL. Он же является языком структурированных запросов. Собственно от сюда и SQL - Structured Query Language.

Так же мы знаем, что когда кто-то говорит о взломе сайта, то в 90% это означает взлом именно базы данных этого сайта. Это всё по той простой причине, что при удачном взломе БД, хакер получает доступ к пользователям данного ресурса, к платежам интернет магазина, к важным документах хранящихся на сайте, ценам, товарам и т.д.

Цель процесса взлома состоит в том, чтобы обмануть систему сервера при помощи запуска вредоносного кода, который в свою очередь способен открыть для взломщика практически любые доступы к сайту и БД. А так же подобный подход может поставить под угрозу стабильную работу всего сервера. Данный подход как раз и называется SQL инъекцией. Именно так называют отправку вредоносных команд в базу данных, пробираясь через несанкционированные каналы. Данные команды поступают из пользовательского ввода, который просто напросто не был проверен на вредоносность на стороне сервера.

Разновидностей SQL инъекций несколько, но основными выделяют только две.

  1. Атаки, когда злоумышленник способен сразу получить запрос от сервера. Введя например команду в форму обратной связи и отправив её. В таком случае, после отработки кода, в момент занесения значений формы в БД, на адрес хакера могут уйти необходимые для него данные. Разумеется это лишь один из примеров. Но суть первого способа, как раз и заключается в том, что хакер получает ответ от сервера сразу.
  2. Второй способ как раз полностью противоположен первому. Т.е. взломщик, заносит код в БД и должно в дальнейшем что-то произойти на сервере с его данными. Например вредоносные команды должны вывестись на страницу сайта и в таком случае отработают. Была одна ситуация в моей практике. Клиент (владелец сайта) заполнил новый товар на сайте и в названии указал всего одну одинарную кавычку ('). Ну например: S'il vous plaît. И так как для скорости отработки скрипта в коде использовались одинарные кавычки, то кавычка с названия товара, закрыла открывшуюся кавычку в PHP и далее скрипт перестал исполняться. Конечно от этого большого вреда не было, но по крайней мере это наглядный пример, второго способа SQL инъекций.

Хотелось так же уточнить, что именно sql инъекции на сегодняшний момент излюбленное средство современных хакеров. Благодаря ним, не раз взламывали базы данных таких сайтов как Microsoft, Yahoo, Linkedln и т.д. По этой причине я привел ниже несколько способов того, как вы можете обезопасить данные на сервере.

Как защитить сервер и базу данных от SQL инъекций:

  1. Подготовленные утверждения. Запросы с параметрами заставляют разработчиков определять весь код SQL, а затем передавать каждый параметр в запрос, что позволяет базе данных различать код и данные независимо от того, какой ввод предоставляется.

  2. Экранируйте все данные которые вводит пользователь. Каждая СУБД поддерживает одну или несколько схем экранирования символов, специфичных для определенных типов запросов. Если затем вы удалите все введенные пользователем данные, используя правильную схему экранирования для используемой базы данных, СУБД не будет путать этот ввод с кодом SQL, написанным разработчиком, тем самым избегая любых возможных уязвимостей SQL-инъекций.
    На PHP вы можете воспользоваться методом htmlspecialchars который преобразует спец. символы в html сущности.

  3. Используйте брандмауэр веб-приложений . Популярным примером является бесплатный модуль с открытым исходным кодом ModSecurity, доступный для веб-серверов Apache, Microsoft IIS и nginx. ModSecurity предоставляет сложный и постоянно меняющийся набор правил для фильтрации потенциально опасных веб-запросов. Его защита от SQL-инъекций может уловить большинство попыток проникнуть через SQL через веб-каналы.

  4. Хранимые процедуры . Хранимая процедура определяется и сохраняется в самой базе данных, а затем вызывается из приложения, а не того, что пользователю разрешено вводить.

  5. Наименьшая привилегия. Минимизация привилегий, назначенных каждой учетной записи базы данных, чтобы пользователи имели достаточное разрешение для выполнения своей работы, но не более того.

  6. Скрывать сообщения об ошибках. Сообщения об ошибках являются важным средством разведки для злоумышленников, поэтому, если это возможно, держите их в логах на сервере. Обязательно отключите в настройках сервера, CMS и фреймворка вывод ошибок PHP

  7. Использовать современные технологии языка при работе с БД. Это пожалуй самый важный пункт, так же как и п.6, и п.2. Всегда при работе с БД не используйте простые PHP запросы к БД. Обязательно запросы должны производиться либо при помощи MySQLi или же при помощи PDO. Дело в том, что в обе технологии уже входят защиты от SQL инъекций, что создаст для вас дополнительную безопасность БД.

Использовать все способы или нет это уже дело ваше, но каждый из этих способов значительно повысит безопасность хранимых на сайте данных. Если же вы будете использовать ВСЕ методы , то разумеется это повысит вашу безопасность на ОЧЕНЬ высокий уровень.

Так же мне бы хотелось узнать, какими способами безопасности пользуетесь вы, так что жду ваших ответов в комментариях!


it-blog.club 757
Автор: Ярослав Хмель


Если Вам понравилась статья, то можете поддержать блог переведя N сумму на кофе авторам или оплату хостинга!
В любом случае спасибо! А так же не забывайте про группу в ВК
ПОИСК ПО САЙТУ
Поддержать