Настройки безопасности сайта на фреймворке HLEB2

23 Мая (ред)

HLEB2 — это фреймворк на PHP, который используется для создания веб-приложений и RESTful API. Хотя он сам по себе достаточно простой, безопасность остаётся важным аспектом при работе с любым веб-фреймворком.

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

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

1.1 Добавить в форму и/или запрос CSRF-защиту, предусмотренную фреймворком. Об этом есть упоминание в документации. Проверить, запросив с неправильным токеном и валидным.

1.2 Отправлять важные данные при помощи методов POST, PUT, PATCH и тд, но не используя параметры метода GET.

2) DEBUG-режим — работа приложения в отладочном состоянии полезна для разработки, но открывает системные данные на публичном ресурсе.

2.1 Использовать DEBUG-режим только при разработке. Эта настройка находится в конфигурации фреймворка.

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

3) Уникальный идентификатор проекта и кеш — кешируемые данные и свойства конкретного проекта при неправильном использовании потенциально могут содержать конфиденциальные данные или средства к их получению.

3.1 При копировании проекта для иных целей (например, чтобы создать из этого проекта другой), путем прямого переноса из папки, рекомендуется в перенесённой(!) конечной копии очистить данные в папках "storage/cache/key", "storage/public" и "storage/logs". В общем, везде, где хранится кеш с подразумеваемым его удалением.

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

4) Фильтрация входящих данных и очистка выводимых данных — в данных, поступающих извне, может быть всё, что угодно.

4.1 Ограничивайте внешние данные по принципу "что не разрешено, то запрещено".

4.2 Используйте специальные методы маршрутов с регулярным выражением(where([...])), чтобы лишние символы отбрасывались уже на этом уровне. В файле /config/system.php в параметре 'url.validation' также можно ограничить допустимые символы в маршрутах для всего проекта, что более предпочтительно по производительности.

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

4.4 Основное внимание нужно обратить на то, чтобы пользовательские данные не попадали напрямую в базу данных (защита от SQL-инъекций), например, используя PDO. И также код JavaScript, а лучше любой код в тегах, был особым образом обработан при самом поступлении данных. Если производится запись в базу данных, то рекомендуется хранить пользовательские данные в необработанном виде, применяется лишь отделение данных от запроса (например, средствами PDO). А при выводе нежелательные теги преобразовывать в спецсимволы или иным образом обезопасить контент.

4.5 Указание кодировки каждой веб-страницы должно быть обязательным (в основном это кодировка UTF-8). Так данные будут интерпретированы в ожидаемом виде.

4.6 Использовать Content Security Policy (CSP). Это заголовок, который позволяет в явном виде объявить разрешённый список источников, с которых можно подгружать различные данные, например, JS, CSS, JPG и тд.

5) Безопасность используемых данных — окружение, в котором запущен проект, тоже должно быть проверено на безопасность.

5.1 Настройте права доступа для веб-сервера и командной строки (в UNIX-системах), добавив владельца проекта в группу веб-сервера и разрешив этой группе полный доступ к папке /storage/. Остальным папкам проекта нужно особым образом ограничить права. Подробнее в документации.

5.2 Выставите значения для cookies в php.ini (session.use_cookies=On, session.use_only_cookies=On, session.cookie_httponly=On, session.cookie_secure=On) и убедитесь, что вам известно, какие условия будут выполняться при этом.

6) Обработка ошибок и логирование — логируемая информация может пригодиться не только разработчику сайта, попади она в свободный доступ.

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

7) Обновление фреймворка и зависимостей — исправления в безопасности должны быть оперативно доставлены в приложение.

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

8) Общие рекомендации по безопасности — советы, не вошедшие в другие разделы.

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

8.2 Запретите вставку страниц проекта в сторонние фреймы, если это не задумано заранее, минимальная защита представлена заголовком X-Frame-Options в файле index.php в публичной директории проекта.

8.3 Если вы используете закрытое API, доступное по одному из способов аутентификации, убедитесь, что способ реализован правильно.

fomiash fomiash + 215
Опубликовано в PHP фреймворк HLEB
Для ответа вы можете авторизоваться


Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.