Рекомендации по повышению уровня защищенности web-приложений

Articles

Рекомендации по повышению уровня защищенности web-приложений

  • Организовать авторизованному пользователю web-приложения возможность самостоятельного завершения сеанса работы в web-приложении
  • Обеспечить гарантированное удаление идентификатора соответствующей сессии по завершению сеанса работы клиента web-приложения.
  • Организовать доступ к защищенным ресурсам web-приложения только после прохождения процедуры аутентификации.
  • Обеспечить хранение аутентификационных данных пользователей web-приложения только в криптографически защищенном виде.
  • Исключить хранение аутентификационных данных в файлах и HTML-страницах, доступных по URL, а также информации, позволяющей сделать вывод о структуре каталогов web-приложения на web-сервере.
  • В случае, если в web-приложении предусматривается возможность внесения изменений пользователем в принадлежащий ему профиль, из внесенние необходимо подтверждать дополнительной процедурой аутентификации.
  • Запретить использование заголовка REFERER в качестве основного механизма авторизации.
  • Для построения SQL-запросов необходимо использовать параметризованные запросы (например, хранимые процедуры). В случае отсутствия такой возможности, организовать процедуру предварительной обработки получаемых от пользователя данных (путем удаления метасимволов « ` – / *», а также следующих SQL-операторов: SELECT, UNION, ALTER, UPDATE, EXEC, DROP, DELETE и INSERT). Осуществлять преобразование HTML-кода входного потока данных следующим образом:
    • Заменить символы < > на &lt и &gt;
    • Заменить символы () на &#40 и &#41;
    • Заменить символ # на &#35;
    • заменить символ & на &#38.
  • Осуществлять фильтрацию входного потока данных (например, с использованием методов 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-атака (сетевого уровня, прикладного уровня);
    • дефейс сайта;
    • несанкционированный доступ к интерфейсу управления;
    • обнаружение утечки административных учетных данных, ключа или секрета;
    • обнаружение утечки пользовательских данных.
Комментарии: 0