Рекомендации по повышению уровня защищенности web-приложений
- Организовать авторизованному пользователю web-приложения возможность самостоятельного завершения сеанса работы в web-приложении
- Обеспечить гарантированное удаление идентификатора соответствующей сессии по завершению сеанса работы клиента web-приложения.
- Организовать доступ к защищенным ресурсам web-приложения только после прохождения процедуры аутентификации.
- Обеспечить хранение аутентификационных данных пользователей web-приложения только в криптографически защищенном виде.
- Исключить хранение аутентификационных данных в файлах и HTML-страницах, доступных по URL, а также информации, позволяющей сделать вывод о структуре каталогов web-приложения на web-сервере.
- В случае, если в web-приложении предусматривается возможность внесения изменений пользователем в принадлежащий ему профиль, из внесенние необходимо подтверждать дополнительной процедурой аутентификации.
- Запретить использование заголовка REFERER в качестве основного механизма авторизации.
- Для построения SQL-запросов необходимо использовать параметризованные запросы (например, хранимые процедуры). В случае отсутствия такой возможности, организовать процедуру предварительной обработки получаемых от пользователя данных (путем удаления метасимволов « ` – / *», а также следующих SQL-операторов: SELECT, UNION, ALTER, UPDATE, EXEC, DROP, DELETE и INSERT). Осуществлять преобразование HTML-кода входного потока данных следующим образом:
- Заменить символы < > на < и >
- Заменить символы () на ( и )
- Заменить символ # на #
- заменить символ & на &.
- Осуществлять фильтрацию входного потока данных (например, с использованием методов Server.HTMLEncode и HttpServerUtility.HTMLEncode в ASP и ASP.NET).
- Запретить пользователю ввод данных, в которых допустимы HTML-теги <IMG> или <TABLE>.
- При возникновении ошибки в web-приложении, запретить предоставлять следующую информацию в выводе сообщений об ошибках:
- данные о структуре файловой системы (информация о версии операционной системы, директориях с системными файлами и системным программным обеспечением, включая
- пути к директориям и файлам
- фрагменты программного или конфигурационного кода;
- сообщения об ошибках при передаче запросов в СУБД;
- SQL-выражения, используемые при доступе к базе данных.
- При обработке ошибок web-сервером выдавать пользователю страницу-заглушку с кодом НТТР-ответа web-сервера «200».
- При прохождении процедуры аутентификации пользователей в web-приложении должны использоваться защищенные протоколы Kerberos (в случае доменной аутентификации) или TLS v1.2 (и выше).
- Передачу аутентификационных данных на web-сервер осуществлять методом POST.
- Исключить использование при обработке web-сервером данных в формате XML внешних сущностей (External Entity), внешних параметров сущностей (External Parameter Entity) и внешних описаний типа документа (External Doctype).
- Запретить кеширование web-форм ввода конфиденциальной информации. Выставить атрибут HTTPOnly у параметров cookie, значения которых не должны быть доступны сценариям, выполняемым браузером. У параметров cookie, содержащих чувствительную информацию, необходимо выставить атрибут secure.
- Проводить проверку корректности вводимых пользователем данных как на стороне клиента (с использованием сценариев, исполняемых браузером), так и на стороне сервера.
- Использовать директивы в заголовках сообщений HTTP, определяющие применяемую кодировку. Исключить использование разных кодировок для разных источников входных данных.
- Перед использованием на web-ресурсах JavaScript-кода, подгружаемого со сторонних ресурсов, осуществлять его проверку на предмет вредоносного воздействия на отображаемую в браузерах пользователя информацию и возможность кражи аутентификационных данных и файлов-cookie пользователей.
- Осуществлять периодическую проверку хэш-сумм используемых JavaScript. В случае изменения хэш-сумм отключать использование JavaScript на сайте и выполнять повторную проверку функциональности.
- Отказаться от использования динамически формируемых кодов JavaScript на web-ресурсе.
- Отдавать предпочтение загрузке внешних зависимостей (JavaScript, CSS и др.) из контролируемых источников.
- Разработать и поддерживать в актуальном состоянии планы реагирования на основные типы инцидентов:
- DDoS-атака (сетевого уровня, прикладного уровня);
- дефейс сайта;
- несанкционированный доступ к интерфейсу управления;
- обнаружение утечки административных учетных данных, ключа или секрета;
- обнаружение утечки пользовательских данных.