Apache 'Header set' работает по-разному в разных браузерах

Я запускаю автономную установку Nextcloud на Apache за HAproxy.

Я обнаружил ошибку шрифтов, аналогичную описанной в на этом форуме сообщение . В качестве средства правовой защиты предлагается изменить Content-Security-Policy следующим образом:

<IfModule mod_headers.c>
    Header set Content-Security-Policy: "font-src https: data:;"
    # `mod_headers` cannot match based on the content-type, however,
    # the `Content-Security-Policy` response header should be send
    # only for HTML documents and not for the other resources.
    <FilesMatch "\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ico|jpe?g|js|json(ld)?|m4[av]|manifest|map|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|webmanifest|woff2?|xloc|xml|xpi)$">
        Header unset Content-Security-Policy
    </FilesMatch>
</IfModule>

Однако это имеет эффект, который я не могу объяснить. Если я получаю доступ к Nextcloud через Firefox / Chrome, есть два заголовка Content-Security-Policy :

Chrome/Firefox CSP headers

Это вызывает 'Content-Security-Policy: font-src https: data :;' Заголовок следует игнорировать, поскольку он менее строг, насколько я понимаю. Проблема, с которой я сталкиваюсь, сохраняется.

Однако, если я получаю доступ к Nextcloud через IE, я вижу один заголовок:

Content-Security-Policy: font-src https: data:;, default-src 'self'; script-src * 'unsafe-inline' 
'unsafe-eval'; style-src * 'unsafe-inline'; img-src * 'unsafe-inline' data:; font-src *;
 object-src 'self';media-src 'self'; frame-src 'self';

В этом случае проблема решена и шрифты загружаются.

Что могло вызвать второй заголовок появиться в Chrome / Firefox? Как я могу решить эту проблему?

1
задан 16 November 2020 в 16:44
2 ответа

Похоже, IE объединяет два значения Content-Security-Policy , в то время как другие браузеры этого не делают, и это приводит к другому поведению. Но проблема в том, что заголовок задается дважды. Пара вариантов:

  1. Найдите другое место в вашей конфигурации, где устанавливается Content-Security-Policy , и удалите его.

  2. Значение вашего заголовка устанавливается с помощью onsuccess (по умолчанию), поэтому другое значение должно быть установлено с условием всегда .См. Заголовок . Apache объединяет два списка и отправляет их оба. Таким образом, вы можете либо очистить значение в условии always :

      Header always unset Content-Security-Policy).
      Заголовок при успехе установлен Content-Security-Policy "font-src https: data :;"
     

    или замените значение в всегда своим:

      Заголовок всегда устанавливает Content-Security-Policy "font-src https: data :;"
     
1
ответ дан 4 January 2021 в 08:35

После некоторых дополнительных поисков, я думаю, что нашел ответ.

Оказывается, HAproxy добавлял связанные с безопасностью заголовки к запросам, которые проходили через него. Это было причиной дублирования. Различное поведение браузеров было признаком того, что заголовок CSP был специфичным для Chrome.

Проблема была устранена путем введения различных заголовков CSP, которые могли анализироваться разными браузерами в HAproxy. Это также устранило исходную проблему, когда шрифты не загружались.

Спасибо Эндрю за помощь с этой проблемой.

1
ответ дан 4 January 2021 в 08:35

Теги

Похожие вопросы