EN · DE · RU · FR · ES

#801: SecurityHeaderFilter.java

Servlet Filter, projectforge-business/src/main/java/org/projectforge/security/SecurityHeaderFilter.java

Что это

Servlet-фильтр, добавляющий HTTP-заголовки безопасности к каждому HTTP-ответу. 76 строк. Реализует jakarta.servlet.Filter (бывший javax.servlet.Filter — миграция Jakarta EE 9 в коммите 77bade6df). Javadoc ссылается на статью AppCanary о HTTP security headers. Защищает от XSS, clickjacking, MIME-sniffing, DNS-prefetch атак.

Пять защитных заголовков

ЗаголовокОписание
X-XSS-Protection: 1; mode=blockВключает встроенный XSS-фильтр браузера. mode=block — вместо фильтрации, браузер полностью блокирует страницу при обнаружении атаки
X-DNS-Prefetch-Control: offОтключает предварительный DNS-резолвинг. Безопасность: предотвращает утечку информации о внутренних хостах через DNS-запросы
X-Frame-Options: SAMEORIGINЗапрещает встраивание страницы в iframe с других доменов. Защита от clickjacking: SAMEORIGIN разрешает iframe только с того же домена
X-Content-Type-Options: nosniffЗапрещает браузеру "угадывать" MIME-тип. Без nosniff браузер может интерпретировать безобидный текстовый файл как исполняемый скрипт (MIME-sniffing атака)
Content-Security-Policy (+ X-Content-Security-Policy, X-WebKit-CSP)CSP (Content Security Policy) — самый мощный заголовок. Ограничивает источники скриптов, стилей, изображений. Значение загружается из конфигурации сервлета (init-param "csp")

CSP — настраиваемый заголовок

В отличие от остальных четырёх (жёстко закодированы), CSP загружается из конфигурации через filterConfig.getInitParameter("csp"). Значение задаётся в web.xml (или в WebXMLInitializer). Если параметр не задан — заголовок не добавляется. Это позволяет администратору настроить CSP под конкретный deployment. Два fallback-заголовка (X-Content-Security-Policy для старых Firefox, X-WebKit-CSP для старых Chrome/Safari) добавляются для обратной совместимости.

История

Файл практически не менялся с создания — только обновления копирайта и миграция javax.* → jakarta.*. Это один из самых стабильных файлов в проекте — security headers стандартизированы и редко требуют изменений.

Git History

868d6abb7 2025 -> 2026
63081666f Source file headers: 2024-> 2025.
77bade6df javax.* -> jakarta.*
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.
5f7ef41b8 Copyright 2021 -> 2022
ceb63e8a1 Source code header: (C) 2001-2021.
7c79f1922 Copyright of source header -> 2020.
32f634b88 Optimize imports
dd5ca38ac CopyRight of all java file-header updated or created.