Любые сайты достаточно уязвимы для атаки SQL, если владелец их вовремя и правильно не защитит. SQL-инъекция остается одной из самых распространенных и опасных видов атаки на сайт.
SQL-инъекция является способом атаки, при которой злоумышленник вводит SQL-команды и отправляет вредоносные SQL-запросы через веб-страницу сайта. Такая инъекция грозит всем сайтам, которые в своей работе используют базу данных. Ее опасность состоит в том, что она открывает возможность злоумышленнику управлять базой данных сайта, например:
обходить аутентификацию на веб-ресурсе;
взаимодействовать с информацией в базе данных: изменять, удалять, зашифровывать и т. д.;
получить конфиденциальные данные о пользователях или платежных реквизитах;
и др.
В общем, SQL-инъекция дает хакерам доступ к базе данных, а дальше они могут поступать по своему усмотрению. Например, могут зашифровать всю информацию в базе данных, а потом требовать выкуп у владельца сайта за ее расшифровку.
Уязвимые сайты и SQL-инъекция
Чтобы уметь защищать свой веб-сайт, важно знать «врага» в лицо. SQL-инъекция бывает 5-ти видов:
классическая — является самой опасной атакой, при которой хакер получает полный доступ к базе данных;
error-based — не дает хакеру полного доступа к БД, но позволяет получать данные за счет чтения ошибок в работе СУБД;
boolean-based — не дает доступ сразу ко всей базе данных, но открывает возможность «перебирать» данные «поштучно»;
time-based — не открывает доступ ко всей БД, но, как и предыдущий вид, дает возможность хакеру «перебирать» данные, опираясь на время отклика базы;
out-of-band — специфичный вид атаки, который заточен под конкретную базу данных конкретного сайта.
Любой сайт может быть атакован через «уязвимые точки» на веб-странице. Такими «точками» являются:
форма аутентификации,
поисковая строка на сайте,
каталог,
места, где формируются REST-запросы,
и др.
В общем, уязвимыми местами сайта являются те компоненты, где формируется запрос к базе данных.
Уязвимые сайты: как защитить SQL?
Нужно взять за правило следующее выражение: полностью безопасных сайтов не существует, потому что постоянно открываются уязвимости, о которых ранее не было известно. Поэтому, даже если вы «закрываете» известные уязвимости, всегда есть риск взлома вашего ресурса.
Для защиты от распространенных SQL-инъекций есть несколько рекомендаций:
«Белые списки» для форм аутентификации. Тут можно указать, какие ключи, значения и символы могут быть использованы в форме, чтобы исключить в них введение SQL-запросов.
Использовать в формах метод POST, а не GET. GET передает запрос из формы незашифрованным, а это значит, что хакер может получить из него имена переменных, которые можно применить для ввода SQL-инъекции.
Нужно настроить обработку переменных. Любые переменные из форм комментариев или форм аутентификации должны быть обработаны на наличие неуместных символов перед их отправкой в базу данных. Например, нужно заменять служебные символы, исключать лишние пробелы, ограничить применение кавычек и др.
Применяйте PDO. Такой подход снижает риск SQL-инъекций за счет того, что данные и запросы отправляются отдельно друг от друга. Таким образом, даже если в переменной, содержащей данные, будет «лишний» символ, сервер не отреагирует на него как на часть запроса. Поэтому порча запроса через переменную не сработает. Эта рекомендация остается одной из самых эффективных, которая способна отсеять большинство новоиспеченных SQL-взломщиков.
Это были рекомендации, которые напрямую помогут избежать SQL-инъекции. Но есть ряд рекомендаций, которые косвенно защитят ваш ресурс от SQL-атак, так как не дадут взломщику определить уязвимые места вашего сайта.
В число таких рекомендаций входят следующие:
Установите запрет на обработку служебных файлов. Например, злоумышленник может скачать файл «хедера» вашего сайта, чтобы изучить его подробнее на наличие уязвимостей. Для этого все подключаемые к сайту модули располагают в отдельную папку и закрывают доступ к ней.
Старайтесь не выкладывать код сайта в открытый доступ. Это касается тех случаев, когда вам нужна помощь в программировании и вы на профессиональных форумах выкладываете код сайта, прося о помощи. Ограничивайтесь фрагментами кода, когда вам реально нужна помощь. Чем меньше открытой информации о вашем сайте, тем меньше шансов, что он будет взломан.
Не копируйте чужой код. Бывают случаи, когда вы просто копируете чужой код и вставляете его на свой сайт, чтобы решить какую-то проблему. Не делайте этого. Если нет другого выхода, то тщательно проверяйте, что вы вставляете, потому что есть риск, что код уже будет «заражен».
Не выводите ошибки на опубликованном сайте. Если злоумышленник увидит ошибки на вашем сайте, тогда у него будет «пища для ума», как можно взломать ваш сайт.
Вовремя обновляйте ресурсы сайта. Всегда вовремя обновляете язык программирования веб-сайта или CMS. Любое обновление является способом устранения известных багов; если вы не обновляетесь, значит, у хакера будет возможность воспользоваться известными уязвимостями, чтобы взломать ваш сайт.
Всегда применяйте сложный пароль. Это касается административной панели сайта и базы данных. Часто хакерам не нужно применять SQL-инъекцию для того, чтобы добраться до базы данных сайта. Потому что пользователи забывают сменять стандартные доступы к базе данных на свои.
Заключение
Уязвимые сайты не являются редкостью, как и SQL-инъекции. Любая защита веб-ресурса начинается с примитивных мер безопасности, и далее по нарастающей. Нельзя игнорировать даже самый простой шаг, чтобы обезопасить свой ресурс.
Злоумышленники тоже люди. Большинство злоумышленников работают по принципу: попробовал взломать сайт простым методом, ничего не получилось, не стал напрягаться и пошел дальше. Хуже, когда хакер целенаправленно хочет взломать ваш сайт, — от таких сложнее всего защищаться.
Другое