Безопасность
В этом разделе рассказывается о том, как включить защиту от csrf атак и разрешить междоменные запросы.
Подключение CSRF и CORS в приложении
Для создания бина Customizer для CORS задайте настройку n2o.security.cors.enabled=true.
Для создания бина Customizer для CSRF задайте настройку n2o.security.csrf.enabled=true.
@Bean
public SecurityFilterChain filterChain(HttpSecurity http, Customizer<CorsConfigurer<HttpSecurity>> n2oCorsCustomizer, Customizer<CsrfConfigurer<HttpSecurity>> n2oCsrfCustomizer) throws Exception {
...
http.csrf(n2oCsrfCustomizer);
http.cors(n2oCorsCustomizer);
...
return http.build();
}
Настройки CSRF защиты
Настройки защиты от межсайтовой подделки запросов (Cross-Site Request Forgery).
| Наименование | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
| n2o.security.csrf.enabled | boolean | Включить CSRF защиту | false |
| n2o.security.csrf.cookie-name | string | Имя cookie для CSRF токена | XSRF-TOKEN |
| n2o.security.csrf.header-name | string | Имя HTTP заголовка для CSRF токена | X-XSRF-TOKEN |
| n2o.security.csrf.parameter-name | string | Имя параметра для CSRF токена | _csrf |
| n2o.security.csrf.cookie-path | string | Путь для CSRF cookie | / |
| n2o.security.csrf.ignoring-request-matchers | Список строк | Список URL patterns, которые исключаются из CSRF защиты. Поддерживает Ant-style patterns (например: /api/public/**) | [] |
| n2o.security.csrf.secure | boolean | Использовать Secure flag для cookies (только HTTPS) | true |
n2o:
security:
csrf:
enabled: true
ignoring-request-matchers:
- /api/public/**
- /health
Настройки Cookie
Настройки для session cookies.
| Наименование | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
| n2o.security.cookie.same-site | enum | SameSite политика для session cookie. Возможные значения: Strict, Lax, None | Lax |
n2o:
security:
cookie:
same-site: Strict
Настройки CORS
Настройки междоменных запросов (Cross-Origin Resource Sharing).
| Наименование | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
| n2o.security.cors.enabled | boolean | Включить CORS | false |
| n2o.security.cors.allowed-origins | Список строк | Разрешенные origins для CORS | null |
| n2o.security.cors.allowed-methods | Список строк | Разрешенные методы для CORS | GET, OPTIONS |
| n2o.security.cors.allowed-headers | Список строк | Разрешенные заголовки для CORS | * |
| n2o.security.cors.exposed-headers | Список строк | Список заголовков, которые может содержать фактический ответ и могут быть доступны | null |
| n2o.security.cors.allow-credentials | boolean | Должен ли браузер отправлять учетные данные, такие как файлы cookie, вместе с междоменными запросами | false |
n2o:
security:
cors:
enabled: true
allowed-origins:
- https://example.com
- https://app.example.com
allowed-methods:
- GET
- POST
- PUT
- DELETE
allowed-headers:
- Content-Type
- Authorization
exposed-headers:
- X-Total-Count
allow-credentials: true
Настройки безопасности HTML
Перед вставкой HTML-код очищается от п отенциально опасных тегов и атрибутов. Для этого используется рекомендованная конфигурация библиотеки DOMPurify.
Чтобы подключить собственные правила очистки, передайте конфигурацию csp в поле user.
Это позволит изменить поведение очистки при вставке HTML.
csp поддерживает все параметры, поддерживаемые DOMPurify,
а также дополнительный массив ALLOWED_DOMAINS – список доменов, для которых разрешён src у тегов <iframe>.
Для передачи необходимо указать настройки в файле user.properties
Пример, будет разрешена вставка <iframe> для доверенного домена https://example.ru,
а также разрешена вставка аттрибута style
csp.allowed_tags=[iframe]
csp.allowed_attr=[style]
csp.allowed_domains=[https://example.ru]
Завершить настройку в файле config.json
Где ключ соответствует формату ключей DOMPurify
{
"user": {
"csp": {
"ALLOWED_TAGS": "#{csp.allowed_tags}",
"ALLOWED_ATTR": "#{csp.allowed_attr}",
"ALLOWED_DOMAINS": "#{csp.allowed_domains}"
}
}
}
Атрибуты
| Наименование | Тип | Описание |
|---|---|---|
| ALLOWED_DOMAINS | Строка | Список разрешённых доменов (точное совпадение или поддомен). |
| DOMPurify атрибуты | Строка | Параметры для DOMPurify |
Для детального описания параметров DOMPurify обратитесь к официальной документации.