Защита веб-сайта. Безопасности много не бывает

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

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

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

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

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

Итак, как снизить вероятность совершения атаки/взлома?

Следует разделять уровни безопасности и работать над каждым из них максимально полно, не упуская важных компонентов. Каждый пункт – имеет значение!

1 уровень
1. Настраивать сервер (по возможности) только с одного компьютера
2. Следить за обновлениями ОС на ПК с которого производится работа с сервером и его файлами
3. Следить за обновлениями стороннего софта, установленного на ПК, с которого производится работа с сервером
4. Использовать антивирусные ПО для ПК
5. Делать резервные копии (бэкапы) ОС, и сохранять копии на отдельных жестких дисках
6. Использовать на ПК парольные менеджеры, с защитой от перехвата буфера обмена.

2 уровень
1. Использовать только надежное ПО на сервере (актуальные stable-версии)
2. Следить за обновлениями сборок PHP, MySQL, Apache, а также любого прочего софта на сервере, вроде PHPMyAdmin, Zend и т.п.
3. Использовать FastCGI на веб-сервере – это производительный и безопасный способ взаимодействия веб-сервера и приложений
4. Использовать на веб-сервере антивирус, к примеру, ClamAV – хорошая штука, способная минимизировать риски заражения вирусом. Не панацея конечно, но улучшит безопасность точно
5. Использовать для работы с файлами исключительно SSH, либо хотя бы FTPS
6. Следите за правами на файлы и папки. Они должны соответствовать (755 – для каталогов, 644 – для файлов). Старайтесь не использовать права со значением 777.
7. Делать резервные копии сайта (файлов и баз данных) – не менее 1 раза в сутки (вручную или автоматически).

3 уровень
1. В используемой CMS, если это возможно, отключить/изменить учетную запись администратора по умолчанию. Во многих CMS после установки создается административный доступ (по умолчанию) – его следует выключить, либо изменить его учетные данные, либо вообще удалить.
2. Использовать сложные пароли к учетным записям в CMS – пароли должны содержать не менее 10 символов и включать в себя различные знаки (буквы разного регистра, цифры, спец.символы – дефисы, подчеркивания, скобки, другие дополнительные знаки).
3. Использовать только актуальные версии установленной CMS
4. Следить за обновлениями используемой CMS
5. Применять только те функциональные расширения, которые нужны для сайта, все не нужное – удалите. Обратите внимание: в разных CMS расширения называются по-разному – плагины, модули, компоненты и т.п.
6. Следить за обновлениями используемых расширений
7. Скачивать все обновления для используемых CMS и расширений, исключительно из надежных источников – с официальных сайтов разработчиков, поставщиков ПО.

4 уровень
1. В CMS нужно четко разделить роли пользователей
2. На сайте должен быть (по возможности) только 1 (один) пользователь с полноценными правами администратора
3. Редакторов, ответственных за размещение материалов на сайте должно быть контролируемое количество. В идеале 2-3. Все сильно зависит от количества материалов и того, насколько часто обновляются материалы на сайте
4. Система комментариев должна быть актуальной и постоянно поддерживаться разработчиком (в случае если это стороннее расширение)
5. По возможности запретить без регистрации публиковать комментарии к материалам.

5 уровень

Инструменты для дополнительного слоя безопасности в самой CMS. Не обязательно, но желательно, если такая возможность есть.

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

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

Несколько хороших инструментов для WordPress и Joomla

Для WordPress (плагины) – любой на выбор

1. Wordfence Security
https://wordpress.org/plugins/wordfence/
https://www.wordfence.com/

2. iThemes Security
https://wordpress.org/plugins/better-wp-security/
https://ithemes.com/security/

3. All In One WordPress Security and Firewall Plugin
https://wordpress.org/plugins/all-in-one-wp-security-and-firewall/
https://www.tipsandtricks-hq.com/wordpress-security-and-firewall-plugin

Для Joomla (компоненты) – любой на выбор

1. RSFirewall
http://extensions.joomla.org/extensions/extension/access-a-security/site-security/rsfirewall
https://www.rsjoomla.com/joomla-extensions/joomla-security.html

2. Akeeba Admin Tools
http://extensions.joomla.org/extensions/extension/access-a-security/site-security/admin-tools
https://www.akeebabackup.com/products/admin-tools.html