В моем проекте у меня есть бэкэнд (весенняя загрузка) и внешний интерфейс (угловой). Команда кибербезопасности хочет, чтобы заголовок CSP был в заголовках ответов на каждой странице.
Я предоставил им заголовок CSP на всех моих конечных точках, аутентифицированных или неаутентифицированных, но они также хотят использовать его для навигационных ссылок, которые отображаются только из внешнего интерфейса, такого как «/ логин».
Итак, я предоставил им CSP в качестве метатега, добавив его в index.html. Тем не менее, они хотят это в качестве заголовка ответа.
Теперь мои вопросы
1: насколько важно иметь CSP на страницах, которые не загружаются из-за взаимодействия с серверной частью?
2: каковы наилучшие способы добиться этого?
3: и поскольку наша команда по кибербезопасности непреклонна, как я могу добавить CSP в заголовок ответа на таких страницах?





Отвечая на ваши вопросы по порядку:
По-прежнему можно найти XXS на странице, которая не взаимодействует с серверной частью. Например, если злоумышленник может выполнить произвольный JavaScript на вашей странице входа, он теоретически может использовать это для кражи паролей ваших пользователей. CSP может смягчить эти атаки и поэтому должен использоваться здесь.
Вы имеете в виду метатег CSP или заголовок? Если это так, я бы предпочел, чтобы они были в заголовке. Если злоумышленник каким-то образом сможет загрузить HTML-документ и он будет обслужен, теоретически он сможет обойти CSP.
Это зависит от вашего веб-сервера. Если вы используете Spring Boot для обслуживания файлов внешнего интерфейса, вы можете включить его с помощью Spring Security, как описано в docs:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
// ...
.headers(headers -> headers
.contentSecurityPolicy(csp -> csp
.policyDirectives("script-src 'self' https://trustedscripts.example.com; object-src https://trustedplugins.example.com; report-uri /csp-report-endpoint/")
)
);
return http.build();
}
}
Другие веб-серверы имеют другую конфигурацию для этого, популярные из них — apache или nginx. По моему опыту, обычно есть веб-сервер, отличный от весенней загрузки, который обслуживает файлы внешнего интерфейса. Если вы обслуживаете только JSON REST-API поверх весенней загрузки, на самом деле нет необходимости устанавливать CSP при весенней загрузке.
Как внешние страницы подаются в браузер? У вас есть отдельный веб-сервер?
Внешний интерфейс angular работает на собственном сервере на порту 4200. Он взаимодействует с бэкэндом через apis, который является весенней загрузкой на порту 8080. Таким образом, они взаимодействуют как междоменные.
Хорошо, на каком веб-сервере размещено ваше угловое приложение? Порт 4200 похож на угловой порт dev-сервера. Ваше угловое приложение работает на производственной установке dev-сервера?
Кстати, другими популярными вариантами будут nginx или apache.
Ваш вопрос заставил меня задуматься, и я поговорил с оперативной группой. Они используют веб-сервер Apache. На локальном веб-пакете встроен угловой. Это дало мне подсказку, что я могу добавить заголовок ответа на сам веб-сервер apache, верно?
Да, вам нужно добавить заголовок ответа на веб-сервере Apache!
Спасибо за вашу поддержку. Я принял это как ответ. Я прошу вас также добавить вышеуказанную часть, чтобы она была полезна для таких, как я.
Спасибо за ваш ответ. Прошу прощения, может быть, у меня нет более глубокого понимания этого. Кстати, я уже использовал ваше решение, чтобы добавить заголовок ответа CSP для всех моих конечных точек. Но проблема заключается в заголовке ответа CSP для страниц, которые еще не взаимодействовали с серверной частью. Можете ли вы уточнить это? Еще раз спасибо.