В нашей компании есть приложение Spring Boot, которое обрабатывает серверную часть, и AngularJS для внешнего интерфейса. Я хотел реализовать политику безопасности контента в качестве защиты от XSS.
Поэтому я ввел внутренний маршрут, который обслуживает индекс. html для Angular приложения.
@GetMapping(value = { "", "/", "index.html" })
public ResponseEntity<StreamingResponseBody> indexPage(final HttpServletRequest p_request)
{
HttpHeaders l_headers = new HttpHeaders();
l_headers.add(CONTENT_TYPE_PARAM, CONTENT_TYPE_TEXT + HTML_SUFFIX);
l_headers.add(CONTENT_SECURITY_POLICY, m_CSPService.getManagerContentSecurityPolicyString());
l_headers.add("X-" + CONTENT_SECURITY_POLICY, m_CSPService.getManagerContentSecurityPolicyString());
try
{
StreamingResponseBody l_responseBody = createStreamingResponseBody(INDEX_FILE_NAME);
return new ResponseEntity<>(l_responseBody, l_headers, HttpStatus.OK);
}
catch (Exception e)
{
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Это работает и заголовок доставляется во внешний интерфейс.
Content-Security-Policy: default-src 'none'; connect-src 'self'; font-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com data:; img-src 'self'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; script-src 'self';
X-Content-Security-Policy: default-src 'none'; connect-src 'self'; font-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com data:; img-src 'self'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; script-src 'self';
Итак, я думал, что все будет работать нормально и встроенные скрипты не будут выполняться, поскольку я настроил script-sr c как 'self'.
Я добавил <script>alert("WINDOW");</script
в конец индекса. html файл и Chrome нормально его выполнил.
Чтобы убедиться, что это только ошибка Chrome Я сделал то же самое в Firefox, и там скрипт не обрабатывается, и появляется сообщение в консоли.
Кто-нибудь видели что-то похожее?