• Мнения
  • |
  • Обсуждения
Роман Кобленц Профессионал

Как защитить свой сайт от взлома?

Сегодня Интернет завоевывает все большую и большую популярность, и слово «сайт» прочно вошло в наш лексикон.

Последнее же время за ручку с этим словом постоянно ходят еще два — это «разработка» и «продвижение». И это неудивительно, ведь под прессом невероятного количества различных предложений в оказании услуг по разработке и продвижению сайтов в мозгу рядового пользователя эти два понятия укоренились как единственные заслуживающие внимания при запуске интернет-проекта.

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

Речь идет о безопасности, причем не о физической безопасности компьютера, на котором хранится ваш сайт, о которой, конечно, тоже стоит позаботиться, а о безопасности в сети Интернет.

Сложно переоценить важность вопросов безопасности вашего сайта, если в его базе данных хранятся важные сведения. Так, например, сложно себе представить, что руководитель ИТ-отдела в каком-либо крупном банке, в базе данных которого хранятся номера кредитных карт его клиентов и прочая важная информация, сможет спокойно спать ночью, если ему накануне сообщить, что сайт банка, за который тот несет ответственность, не защищен должным образом и может быть взломан в течение часа мало-мальски смышленым взломщиком.

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

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

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

Возможность внедрения SQL-инъекции возникает вследствие недостаточной проверки принятых от пользователя значений. Внедрение SQL-инъекции, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных — например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные, получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.

Большинство SQL-инъекций применяется в формах ввода, таких как регистрация пользователя, подписка, заказ товара и т. д. Но не стоит заблуждаться насчет того, что речь идет только об видимых формах ввода. Очень часто для проникновения кода SQL-инъекции используется URL сайта. Таким образом, если ваш сайт никак не защищен от проникновения, взломщик без труда сможет подобрать ключи к вашей базе данных и получить любую информацию, которая в ней хранится.

Итак, перейдем непосредственно к методам защиты вашего сайта от SQL-инъекции:

1. Не доверяйте данным, которые вводит пользователь в форму на вашем сайте. Все эти данные необходимо проверять на наличие в них вредоносного кода. Для этого, во-первых, стоит ограничивать длину полей там, где это возможно. Например, для строки «Имя» вполне хватит 10 символов.

Обрабатывайте специальными функциями все данные, получаемые от пользователя. При использовании PHP здесь подойдут функции mysql_real_escape_string () (экранирует слешами запрещенные символы типа ‘, «), Htmlspecialchars () (преобразует запрещенные html дескрипторы). Также здесь можно проверять тип вводимых значений, например, с помощью intval () для численных значений.

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

3. Принцип внедрения SQL-инъекции заключается в том, что взломщик угадывает структуру ваших запросов к БД, подбирает возможные имена таблиц и столбцов этой базы и на основе полученной информации извлекает данные. Так, например, пытаясь получить доступ к таблице паролей вашей базы данных, он будет подбирать имена типа pass, password, users и т. д. Поэтому, вряд ли ему удастся извлечь из данной таблицы информацию, если вы назовете ее «aslfjsaf». Однако данный метод чересчур радикальный, так как затруднит работу с БД лично вам — из-за неинформативности имен.

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

Главное, что вам необходимо понять, — это важность вопросов безопасности вашего сайта, о этом ни в коем случае нельзя забывать. Доверяйте защиту вашего сайта профессионалам и спите спокойно!

Статья опубликована в выпуске 27.05.2011
Обновлено 21.07.2020

Комментарии (2):

Чтобы оставить комментарий зарегистрируйтесь или войдите на сайт

Войти через социальные сети:

  • Андрей Кудлай Читатель 2 июня 2012 в 11:17 отредактирован 27 мая 2018 в 13:24 Сообщить модератору

    Обрабатывать данные перед помещением их в базу функцией htmlspecialchars() не стоит, поскольку от SQL-инъекции она ну никак не защитит. Данную функцию следует применять только для обработки пользовательских данных при выводе клиенту. Таким образом мы обезопасим сайт от XSS-уязвимостей. Ну а в каком виде данные хранятся в БД (с тегами или без) - БД это абсолютно все равно и никак не повредит.
    Для примера возьмем Вашу же рекомендацию из п.1 о длине поля в 10 символов. Введу я, скажем, имя д'Артаньян... символов в нем ровно 10, но, если обработать перед занесением в БД имя функцией htmlspecialchars(), то в базу попадет такое - д(а здесь 6 символов мнемоника)рта...
    Также неплохо было бы сказать хоть несколько слов о директиве "волшебные кавычки" и почему ее нужно выключать.

    Оценка статьи: 4

  • Даниил Манин Читатель 29 мая 2011 в 14:28 отредактирован 25 мая 2018 в 09:11 Сообщить модератору
    Daniil

    Недавно смотрел историю посещения моего сайта через cPanel, так увидел там много запросов с 2ух разных ip к админке моего сайта. Кто-то хотел получить доступ к моему сайту, с тех пор я усложнил свой пароль по максимуму.