Безопасность предлагаемых нами решений является для нас очень важным фактором. В связи с этим, а также тем фактом, что Drupal является самой безопасной CMS, в этой статье мы представим список рекомендаций, которые поднимут безопасность вашего сайта Drupal на еще более высокий уровень.
Почему хорошо знать способы защиты Drupal?
Как я уже упоминал ранее, обновление модулей и библиотек — один из более простых методов повышения безопасности нашего приложения. Сообщество Drupal, поддерживаемое специальной группой безопасности Drupal, постоянно отслеживает отчеты пользователей о потенциальных ошибках безопасности и предлагает помощь авторам модулей в их устранении. Результатом этих действий являются обновления модулей, которые вводят исправления безопасности.
Конфигурация панели входа
Неправильно настроенная панель входа в систему может предоставлять информацию о наличии в базе данных пользователя, использующего логин, указанный в форме. Если информация, которую возвращает панель в случае, когда злоумышленник предоставил неправильный логин, отличается от информации, когда логин правильный, мы имеем дело с вектором атаки методом грубой силы. Таким образом, злоумышленник может сначала получить логины, а затем заняться подбором паролей.
Модули Drupal, повышающие безопасность сайта
В Drupal есть несколько модулей, которые могут повысить безопасность. Их настройка не требует обширных технических знаний и занимает меньше времени, чем другие методы защиты сайта. Ниже мы представляем некоторые инструменты этого типа.
Password Policy модуль Drupal
Модуль Password Policy позволяет наложить ограничения на пароли пользователей путем определения политик паролей. Это может быть определено набором требований, которые должны быть выполнены, прежде чем изменение пароля пользователя будет принято. У каждого ограничения есть параметр, указывающий минимальное количество важных условий, которые должны быть выполнены для выполнения требования.
Предположим, мы ограничены прописными буквами (с параметром 2), а также числами (с параметром 4). Это означает, что пароль пользователя должен содержать не менее двух заглавных букв и не менее четырех цифр, чтобы его можно было принять.
В модуле также реализована функция «срок действия пароля». Пользователь вынужден изменить свой пароль и может быть заблокирован по истечении срока действия старого пароля.
Политика паролей Drupal позволяет администраторам заставлять определенных пользователей или целые роли изменять свой пароль при следующем входе в систему. Запрос на изменение пароля вместе с соответствующей формой отображается как всплывающее окно, а не перенаправляет пользователя на обычного пользователя user/{user_id}/edit.
Security Review модуль Drupal
Модуль Security Review автоматизирует проверку множества легко совершаемых ошибок, которые делают сайт небезопасным. Этот модуль Drupal интуитивно понятен и очень прост в использовании. Быстро подготовленный отчет разборчив и четко указывает, что необходимо улучшить. Модуль не вносит изменений на вашу страницу автоматически. Результаты отчета должны быть проанализированы, и в отдельных случаях должны быть внесены соответствующие исправления. Не все рекомендации будут приемлемыми. Все зависит от уникальных факторов вашего сайта.
Security Kit модуль Drupal
Модуль Security Kit предоставляет множество вариантов повышения безопасности, помогающих снизить риск использования различных уязвимостей в вашем приложении.
Модуль снижает вероятность использования многих типов атак, в том числе:
- межсайтовый скриптинг;
- подделка межсайтовых запросов;
- кликджекинг.
Paranoia модуль Drupal
Модуль Paranoia определяет большинство мест, где пользователь может выполнить код PHP с помощью интерфейса Drupal, а затем блокирует их. Это снижает потенциальную угрозу, возникающую в результате получения злоумышленником авторизации высокого уровня в Drupal.
Что делает модуль?
- Блокирует использование PHP для разрешения видимости блока.
- Блокирует возможность создавать текстовые форматы, использующие фильтр PHP.
- Блокирует возможность редактировать учетную запись пользователя с uid 1.
- Блокирует предоставление разрешений, которые могут снизить безопасность сайта.
- Блокирует отключение этого модуля. Чтобы отключить его, нужно отредактировать базу данных.
Чтобы воспользоваться всеми преимуществами этого модуля, вам необходимо идентифицировать все сущности, поля и блоки, которые используют фильтр PHP Drupal, и изменить их так, чтобы они работали без него, а затем удалить стандартный фильтр PHP, доступный в admin/config/content/formats.
Как писать безопасный код в Drupal?
Drupal использует решения, которые считаются безопасными при использовании в соответствии со стандартами. При создании безопасного кода необходимо соблюдать множество правил. Ниже представлены наиболее важные из них.
Используйте Twig
Движок Twig по умолчанию автоматически экранирует все переменные. Это означает, что все строки, отображаемые шаблонами Twig (например, все, что находится между {{ }}), автоматически очищаются от элементов, которые могут поставить под угрозу безопасность вашего приложения.
При отображении атрибутов не забудьте заключить их в кавычки или апострофы. Например, class = "{{foo}}", а не class = {{foo}}.
Используйте заполнители
API перевода также очищает строки. Используйте его для строк, которые вы хотите перевести, а затем, например, для рендеринга на стороне внешнего интерфейса.
В Drupal в API перевода есть три типа заполнителей:
@variable
Мы используем его, когда хотим заменить строку или объект класса MarkupInterface на заполнитель.
%variable
Мы используем его, когда хотим вставить значение между тегами.
:variable
Мы используем его, когда значение, которое мы хотим заменить — это URL-адрес, который мы хотим встроить в атрибут href.
Вы можете найти больше о заполнителях на Drupal.org.
Изучите API и используйте его
Drupal предоставляет множество функций для очистки строк.
Среди них:
t (), Drupal :: translation () -> formatPlural ()
Используемый вместе с описанными выше заполнителями, он позволяет создавать безопасные строки, готовые к переводу.
Html :: escape ()
Используется для очистки обычного текста.
Xss :: filterAdmin ()
Используйте его, если хотите очистить текст, введенный администратором, который должен иметь возможность использовать большинство тегов и атрибутов HTML.
UrlHelper :: stripDangerousProtocols (), UrlHelper :: filterBadProtocol ()
Полезно для проверки URL, может использоваться вместе с SafeMarkup :: format ().
Строки, которые прошли через функции t (), Html :: escape (), Xss :: filter () или Xss :: filterAdmin (), автоматически считаются безопасными, как и строки, созданные массивом рендеринга из класса Renderer.
Фильтрация текста в JavaScript
Фильтрация текста на стороне сервера считается одной из лучших практик. Однако бывают случаи, когда фильтрация также выполняется на стороне клиента, чтобы обеспечить дополнительную временную фильтрацию. Это полезно, например, при рендеринге элементов, которые обновляются по мере того, как пользователь вводит текст (то есть вносятся изменения в дерево DOM). Чтобы отфильтровать текст в Drupal с помощью JavaScript, вы должны использовать функцию Drupal.checkPlain (). Эта функция очищает текст, удаляя вредоносные элементы, и защищает, например, от некоторых методов атаки с использованием кликджекинга.
Используйте уровень абстракции при работе с базой данных
Мы рекомендуем никогда не использовать в запросах чистые значения. Вместо этого вы должны использовать заполнители.
Пример:
\Database::getConnection()->query('SELECT foo FROM {table} t WHERE t.name = ‘ . $_GET['user']);
Против
\Database::getConnection()->query('SELECT foo FROM {table} t WHERE t.name = :name', [':name' => $_GET['user']]);
Во втором случае, вместо того, чтобы напрямую использовать значение из пользовательского параметра, мы предоставляем его в качестве замены заполнителя :name. Таким образом, прежде чем поместить это значение в окончательный запрос, Drupal сначала очистит его от элементов, которые могут вызвать SQL-инъекцию.
Аудит безопасности
Процесс защиты сайта должен заканчиваться всесторонним аудитом безопасности, который позволит выявить еще больше потенциальных угроз на вашей странице.
Аудит безопасности должен включать:
Обзор модулей и библиотек
Это означает проверку версий установленных модулей Drupal, просмотр исправлений, библиотек PHP и JavaScript.
Обзор конфигурации
В рамках этой деятельности мы проводим аудит авторизации для ролей, представлений, файлов routing.yml в настраиваемых модулях, текстовых форматах, регистрации ошибок и форм.
Обзор репозитория
Мы проверяем настраиваемые модули и темы, включая маршрутизацию, настраиваемые формы, SQL-запросы, механизмы фильтрации и права доступа к файлам.
Идентификация содержимого репозитория
Мы проверяем содержимое файлов settings.php и .env. Также мы проводим аудит глубоко скрытых элементов. Он основан на проверке репозитория, например, на наличие закрытых ключей SSL или копий или дампов баз данных.
Вывод
В зависимости от уровня развития и знаний Drupal вы можете внести соответствующие исправления в приложение, чтобы сделать его более безопасным. Примеры, представленные в этой статье, однозначно уменьшат количество векторов атак и вероятность их использования. Мы рекомендуем проанализировать доступные варианты и, возможно, внести изменения или новые элементы, которые снизят риск атаки на ваш сайт. Если вам нужна помощь в таких действиях, наша команда поддержки Drupal может провести аудит безопасности вашего сайта.