Chrome игнорирует заголовок CSP - PullRequest
0 голосов
/ 26 мая 2020

В нашей компании есть приложение 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 нормально его выполнил.

Google chrome executed inline script regardless of CSP

Чтобы убедиться, что это только ошибка Chrome Я сделал то же самое в Firefox, и там скрипт не обрабатывается, и появляется сообщение в консоли.

Firefox prevented script from executing

Кто-нибудь видели что-то похожее?

...