Ваш сайт защищен от взлома? А вот около 45% самых известных и крупных компаний в России не имеют достаточного уровня защиты для своих веб-ресурсов. Мы рекомендуем вам ознакомиться с материалом ниже, чтобы проанализировать сайт на критические уязвимости: наличие SQL инъекций.
Для начала поговорим о безопасности.
Безопасностью для сайта можно назвать достаточную неуязвимость автоматизированной системы, при которой уровень риска сохраняется на приемлемом значении. Риском в данном случае представляется условная величина, которая вычисляется как произведение ущерба и вероятности его получением. Вероятность – это стандартные значения, а ущерб в данном вычислении – это нанесенный системе вред, переведенный в количественное значение.
С помощью этих понятий можно математически вычислить угрозу безопасности. Кстати, для государственных тайн и расчета их секретности используются именно такие формулы.
Итак, каким образом эти вычисления имеют отношения к вашему сайту? Все очень просто: еще из школьного курса математики мы знаем, что нулевой вероятности быть не может. А значит, что любой риск, являющийся произведением, уже не равен нулю. То есть, ваш ресурс никогда не может быть на 100% в безопасности: есть несколько распространенных техник, используемых для взлома, и мы вам о них расскажем.
Конечно, вы можете сделать все возможное для того, чтобы защитить свой ресурс. Использовать шифрование для важных данных, поставить TrueCrypt, поставить двойную аутентификацию и так далее. И даже если помнить о том, что любые меры не дадут вам 100% гарантии, вам все равно нужно постараться настроить максимальную защиту.
Чтобы вы могли это сделать, мы поговорим об основных уязвимых местах большинства сайтов.
Методы и техники для взлома сайтов
К основным способам взлома относятся:
- SQL инъекции;
- XSS;
- CSRF;
- PHP инъекции;
- Атаки DDoS (они не дадут доступ к управлению ресурсом, но зато можно нанести ресурсу значительный ущерб).
SQL Injection
Начнем с азов и поговорим о том, как устроен сайт. Сайтом называется программа, написанная на специальном языке программирования (чаще всего это PHP).
Для комфортного управления сайтом или целой системой с начала 2000х годов начали использовать базы данных. Это систематизированная информация обо всем, из чего состоит веб-ресурс: данные пользователей, их пароли, подробности регистрации и активности на сайте. Все эти данные, конечно, закрыты для свободного доступа, их и нужно защищать от взлома.
Утечка персональной информации регулярно происходит даже у крупных компаний, например, банков. Это еще раз доказывает, что 100% защиту не может организовать никто, но все равно нужно пытаться. Если пользователи вашего сайта не будут уверены в высоком уровне безопасности для своих персональных данных, они просто перестанут вам их доверять и уйдут к более защищенным конкурентам.
Что такое инъекции SQL
SQL – это английская аббревиатура, которую можно перевести как «язык структурированных запросов». Именно на этом языке происходит общение с базами данных, а «инъекцией» в данном случае называется внедрение определенного SSQL кода в базу данных. Сервера базы обрабатывают эти коды и выдают определенный ответ.
Запрос:
![Пример функции](https://prime-ltd.su/wp-content/uploads/2020/11/9e4be712e3.jpg)
Теперь сервер выдаст ответ, и пользователь сможет взаимодействовать с полученной информацией. Ее можно анализировать, модифицировать или просто отобразить в браузере.
Возвращаемся к SQL инъекциям. Как ранее мы уже разобрали, это – внедрение новых данных в код SQL с целью получения ответа от сервера базы данных. Сайт уязвим в том случае, если злоумышленник может отправить собственный код, который возможно выполнить.
Разберем случай взлома на простом бытовом примере:
- Вы бросили курить и теперь не приобретаете в магазинах сигареты. То есть, ваш список покупок не включает в себя такого SQL запроса.
- Вы отправляетесь в магазин с определенным запросом: вам нужно молоко. Именно это вы записали на своем листке с покупками.
- Пока вы отвернулись, на ваш листок запускается новый, не санкционированный код SQL от вашего друга-хакера, который курит и не согласен с тем, что вы оставили его наедине с пагубной привычкой.
- После инъекции SQL от друга хакера запрос имеет новое значение («пакет молока 1 штука за 50 рублей. $ИЛИ пачка Мальборо 1 штука за 100 рублей$»).
- В итоге вы магазине читаете продавцу ваш измененный запрос.
![Пример SQL запроса](https://prime-ltd.su/wp-content/uploads/2020/11/0164d318fb.jpg)
- Продавец проанализировал ваш SQL запрос и подумал, что будет далеко идти до холодильника, где стоит молоко. Да и не выгодно, учитывая, что стоимость сигарет больше, а вы предоставили ему выбор, что вам продать.
- В итоге вы получаете пачку сигарет, хотя вы вообще не курите. А ваш друг получает выгоду, в отличие от вас, которому вообще молоко нужно было.
SQL атаки на сайт проходят примерно по такой же схеме, только запросы другие. Изначально у сайта один запрос с базы данных, а при наличии уязвимости и с помощью внедрения нового кода SQL запрос поменяется. Теперь в ответе от сервера можно уже получить пароли и другую персональную информацию пользователей.
Как хакеры проводят взлом
Программа, получая SQL запрос, берет ее в кавычки. Это помогает ей четко определить дальнейшие действия.
Снова разберем процесс взлома на простом примере. Например, вы хотите выяснить возраст вашего друга, и для этого вы используете переменную $_GET[‘name’]. Имя, соответственно, вставляется на место переменной name.
SQL запрос выглядит вот так:
![Пример запроса](https://prime-ltd.su/wp-content/uploads/2020/11/3-12.jpg)
Наша задача – получить от сервера базы данных информацию о том, сколько лет нашей подруге Насте, потому что задавать такие вопросы дамам неприлично. Мы отправляем в программу вот такой код:
![Пример кода](https://prime-ltd.su/wp-content/uploads/2020/11/1-25.jpg)
Теперь рассматриваем код по кусочкам. В нем у нас содержатся 2 пары кавычек. В первой мы прописываем запрос полностью:
![Часть кода](https://prime-ltd.su/wp-content/uploads/2020/11/2-15.jpg)
А во второй у нас детализация по запросу, то есть – имя «Настя».
А вот если такой код отправил злоумышленник, для которого информация о возрасте Насти никак не предназначена, он в запросе может написать неверные данные.
Например, сделает ошибку в имени и поставит кавычку в конце: «Настя’».
Таким образом будет нарушен функциональный синтаксис запроса, и база данных не сможет выдать корректный ответ. Скорее всего, она просто отправит в ответ ошибку, потому что кавычку «’» корректно обработать нельзя:
![Ошибка синтаксиса](https://prime-ltd.su/wp-content/uploads/2020/11/1-24.jpg)
Данные могут обозначаться по-разному. Есть, например, строки и числа, и в зависимости от типа данных нужно выстраивать SQL инъекцию. Вот цифра «1» на может иметь двойной значение (и число, и строка).
Взлом сайта интернет-магазина
Насколько на самом деле страшен взлом сайта? Посмотрим на примере.
Есть интернет-магазин, у которого есть уязвимости к инъекциям SQL. С помощью изменения кода в запросе злоумышленник может легко получить всю персональную информацию из аккаунтов зарегистрированных пользователей.
Для магазина в Интернете иметь такие уязвимости опасно. А тем более, если у сайта настроена система онлайн платежей, когда при помощи инъекции SQL мошенники могут получить данные банковских карт пользователей.
И это – только один из путей, которые используют хакеры для кражи и использования полученных данных. Помимо SQL инъекций, мошенники теперь также запускают вирусы, несанкционированную рекламу, невидимую sape, составляют редиректы и т. д. Пользователям сайтов, совершающим покупки онлайн, стоит помнить о возможной опасности, ведь от взлома не застрахован никто. Рекомендуется не хранить крупные суммы на карте, используемой для покупок в Интернете.
![Магазин с уязвимостью](https://prime-ltd.su/wp-content/uploads/2020/11/site1-1024x533-1.png)
Таким образом, если у вас сайт с важной информацией и персональными данными других людей, у вас просто нет права не защитить его. Для проверки ресурса на базовые SQL уязвимости вам теперь не потребуется помощь профессионалов, эти действия вы можете сделать сами. Но чем крупнее ваш сайт, тем выше уровень защиты нужно иметь.
Если сайт взломали
Когда хакеры делают взлом сайта, они преследуют определенную цель (получить персональные сведения пользователей, уничтожить данные, запустить вирус и другое). После ее достижения злоумышленники оставляют backdoor – условные «двери», то есть точки, по котором хакер снова сможет зайти на сайт. Эти файлы могут быть замаскированы даже под jpg изображения, но внутри них будет прописанный код, с котором можно проникнуть в систему. Сейчас многие владельцы, чтобы устранить уязвимости, используют для сайта антивирусы, работающие с php языком, которые сканируют все файлы на сайте на предмет вредоносных кодов. Мы советуем использовать для этой цели бесплатное антивирусное ПО «Al-Bolit», оно отлично справляется со своей задачей и не требует покупки лицензии.
Чтобы проверить сайт на наличие вирусов и вредных файлов, вам просто нужно загрузить антивирус и активировать его работу. Антивирус автоматически почистит все backdoors, а вам нужно будет закрыть ту уязвимость, которая позволила проникнуть в систему. В первую очередь, обновите движок сайта и обратитесь на хостинг, его администрация может выдать вам лог-файл, через который получится понять, как именно был получен несанкционированный доступ. Обновите все пароли на сайте и почистите все сомнительные данные.
Защищаем сайт: как проверить его уязвимости к SQL инъекциям
В первую очередь, необходимо найти ссылки типа:
То есть, нужно найти все url адреса, которые содержат такие входные параметры. В данном случае значение переменной – 410, и оно может передаваться серверу базы данных. Для того, чтобы сделать проверку, вам потребуется вставить в запрос дополнительный символ и посмотреть, какой ответ на запрос выдаст сервер.
Как защитить ресурс от инъекций SQL
Главный принцип защиты состоит в том, чтобы фильтровать все входящие на сайт данные (выбор страницы, настройки поиска и т.д.). Всю базовую защиту данных можно проводить в несколько этапов:
- Фильтровать данные, чтобы злоумышленники не могли вставить несанкционированный запрос или убрать часть вашего кода.
- При сравнениях кавычек в запросе к базе данных нужно использовать функцию SELECT…WHERE.
- Если в обращениях к БД используется структурированный запрос LIKE, то необходимо применять фильтрацию к символам _ и %.
- Для особо прочной защиты можно действовать от противного. Не блокировать несанкционированные запросы, а настроить ответы только на определенные обращения из «белого списка».
Именно создание White List (белого списка) считается лучшим способом защиты от SQL инъекций. При его использовании в коде программы уже будут прописаны значения запросов, на которые должен отвечать сервер. Теперь на любые другие запросы сайт просто не будет реагировать, что значительно снижает риск взлома сайта через инъекции SQL.
Мы надеемся, что эта статья была полезна для начинающих программистов и владельцев сайтов. Взлома не нужно бояться, поскольку полностью исключить его риск не получится никак. Нужно просто ознакомиться со схемами мошенников и сделать все, чтобы себя от них обезопасить.