10 важных советов безопасности для защиты сайта от хакеров

Вы, наверное, думаете, что ваш сайт не представляет ценности для взлома, но это не так.  Web-сайт постоянно подвергается риску быть взломанным. Большинство взломов происходит не с целью украсть ваши данные или испортить web-сайт, а для того, чтобы использовать сайт для рассылки спама или производить какие-либо незаконные действия. Написано множество скриптов, которые бегают по Интернету в попытке найти сайты с известными проблемами безопасности. Ниже приводится 10 лучших советов, которые помогут сохранить ваш сайт в безопасности:

 

1. Регулярно обновляйте программное обеспечение

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

Об обновлении серверного программного обеспечения должна беспокоиться хостинг компания, так что вам, возможно, не стоит беспокоиться об этом.

Если вы используете программное обеспечение сторонних разработчиков, например, CMS, то вы должны убедиться, что версия актуальна на текущий момент. У большинства разработчиков есть RSS лента с описанием всех вопросов безопасности. WordPress и многие другие CMS уведомляют о доступных новых версиях системы.

 

2. SQL-инъекции

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

Рассмотрим пример:

"SELECT * FROM table WHERE column = '" + parameter + "';"

Если хакер изменит URL параметр и напишет ‘ OR ‘1’ = ‘1, тогда запрос будет выглядеть так:

"SELECT * FROM table WHERE column = '' OR '1'='1';"

Т.к. 1 = 1, то это позволит хакеру добавить дополнительный запрос в конец SQL запроса, который так же будет выполнен.

Вы можете легко предотвратить это, если будете всегда использовать параметризованные запросы.

 

3. XSS

Cross Site Scripting — атака, в которой злоумышленник пытается запустить вредоносный код для посетителей сайта. Нужно убедиться, что вы всегда проверяете данные, кодируете, обрезаете или удаляете все сторонние HTML вставки.

Посмотрим пример:

<html>
    <head>
        <meta http-equiv="refresh" content="5;url=<?=$_GET['url']?>"></meta>
    </head>
</html>

Если мы занесем в GET переменную значение http://localhost/?url=»><script>alert(«XSS»)</script><!—, то мы получим XSS атаку.

 

4. Сообщения об ошибках

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

 

5. Проверки на стороне сервера, проверки в формах.

Проверка данных должны быть, как в браузере, так и на стороне сервера. В браузере можно отловить простые ошибки и выделить поля, в которых допущены ошибки. Например, проверить на пустоту или на ввод только цифр. Однако, эти проверки могут быть легко пропущены и на сервер могут отправиться непроверенные данные. Если сервер не будет проверять входные данные, то это может привести к нежелательным последствиям.

6. Пароли

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

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

Пароль должен храниться в зашифрованном виде. Можно использовать такие алгоритмы, как SHA. Во время авторизации будут сравниваться только зашифрованные данные паролей. Для дополнительной безопасности можно добавлять «соль» в пароль. Для каждого пароля должна быть своя «соль».

В случае взлома и кражи ваших паролей ничего страшного не произойдет. Хакер не сможет расшифровать пароли. Лучшее, что он может сделать — это использовать словарь паролей для подбора. При использовании «соли» пароли будут подбираться медленней, так как будет искаться хэш для «соли» и пароля, что трудоемко.

К счастью, во многих CMS уже встроены эти функции безопасности, хотя в некоторых, возможно, понадобится дополнительный плагин, который будет добавлять «соль» к паролям.

 

7. Загрузка файлов

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

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

Так что можно сделать, чтобы предотвратить это? В конечном итоге мы хотим, чтобы пользователи не могли запустить файлы, которые они загружают. Не рекомендуется полагаться на расширение файлов. Нередки случаи, когда на сервер поступал файл image.jpg.php.

Можно переименовать загружаемый файл и поставить ему правильное расширение или поставить файлу права CHMOD 0666 (файл не сможет быть выполнен). Можно создать .htaccess файл, который предотвратит обращение к файлам с двойным расширением.

deny from all
<Files ~ "^\w+\.(gif|jpe?g|png)$">
order deny,allow
allow from all
</Files>

 

8. Безопасность сервера

Если вы сами настраиваете свой сервер, то необходимо знать некоторые вещи.

Убедитесь, что у вас установлен firewall и блокируются все несущественные порты. Если возможно, установите DMZ (демилитаризованная зона), обеспечивающую доступ к порту 80 и 443.

Для загрузки файлов на сервер, используйте только безопасные методы, такие как SFTP или SSH.

Если возможно, то запустите базу данных на другом сервере. Таким образом только ваш web-сервер сможет получить доступ к базе данных. В результате ваши данные будут лучше защищены.

Наконец, не стоит забывать об ограничении физического доступа к серверу.

 

9. SSL

SSL — протокол, который используется для обеспечения безопасности в Интернете. Всякий раз, когда вы передаете информацию между сайтом и web-сервером, используется сертификат безопасности. Но, если средства коммуникации не являются безопасными, злоумышленники могут получить сертификат и получить доступ к данным пользователей.

 

10. Средства безопасности

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

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

Несколько бесплатных инструментов, которые стоит посмотреть:

  • Netsparker (Free Community Edition, доступна пробная версия). Хорошо подходит для тестирования SQL-инъекции и XSS.
  • OpenVAS. Хорошо подходит для тестирования известных уязвимостей, в настоящее время более 25 000. Но инструмент сложен в настройке и требует OpenVAS на сервере, который работает только на * Nix.

 

При получении результатов в первую очередь нужно сосредоточиться на важных вопросах.

Если вы хотите пойти дальше, можно вручную подвергнуть под угрозу ваш сайт путем изменения POST / GET значений.

Еще стоит попробовать протестировать формы, изменить значение POST, чтобы попытаться передать код для выполнения XSS или загрузить скрипт на стороне сервера.

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

 

Спасибо за внимание!

Подписываемся на рассылку! 😉

Остались вопросы? Задавайте их в комментариях, вместе разберемся! 😉