Простой XML-файл, вызывающий ошибку CSP на несуществующем образе? - PullRequest
1 голос
/ 03 апреля 2019

У меня есть сервер Express со следующей конфигурацией шлем-csp (промежуточное программное обеспечение, управляющее политиками безопасности содержимого для предотвращения уязвимостей, таких как XSS и внедрение кадров):

server.use(csp({
    directives: {
      defaultSrc: ["'self'"],
      scriptSrc: ["'self'", '*.google-analytics.com'],
      imgSrc: ["'self'", '*.google-analytics.com'],
      connectSrc: ["'none'"],
      styleSrc: ["'self'", "'unsafe-inline'", 'maxcdn.bootstrapcdn.com'], // Remove unsafe-inline for better security
      fontSrc: ["'self'"],
      objectSrc: ["'self'"],
      mediaSrc: ["'self'"],
      frameSrc: ["'self'"]
    }
  }));

У меня также естьв моем корне файл browserconfig.xml со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
    <msapplication>
        <tile>
            <square70x70logo src="/mstile-70x70.png"/>
            <square150x150logo src="/mstile-150x150.png"/>
            <square310x310logo src="/mstile-310x310.png"/>
            <wide310x150logo src="/mstile-310x150.png"/>
            <TileColor>#da532c</TileColor>
        </tile>
    </msapplication>
</browserconfig>

Как вы можете видеть, это простой XML-файл без данных изображения, тем более SVG.И все же, когда я пытаюсь нажать https://www.schandillia.com/browserconfig.xml,, в консоль выдается следующее:

Отказался загружать изображение 'data: image / svg + xml, http://www.w3.org/2000/svg' fill ='% 23909090 'width = '10' height = '10 '>', поскольку оно нарушает следующую директиву политики безопасности контента: "img-src 'self' * .google-analytics.com".

Обратите внимание, что содержимое файла XML также отображается на экране браузера.Меня смущает только ошибка консоли.Где файл изображения, на который жалуется мой сервер?

PS : есть ли способ разрешить только этот конкретный SVG (что бы это ни было, при условии, что это безопасно и незлонамеренный, исходящий из такого легитимного источника, как www.w3.org) в моей директиве imgSrc?Я попытался изменить мой server.csp(), но он не сработал:

server.use(csp({
    directives: {
      defaultSrc: ["'self'"],
      scriptSrc: ["'self'", '*.google-analytics.com'],
      imgSrc: ["'self'", 'data:', '*.google-analytics.com'],
      connectSrc: ["'none'"],
      styleSrc: ["'self'", "'unsafe-inline'", 'maxcdn.bootstrapcdn.com'], // Remove unsafe-inline for better security
      fontSrc: ["'self'"],
      objectSrc: ["'self'"],
      mediaSrc: ["'self'"],
      frameSrc: ["'self'"]
    }
  }));

Что это за загадочный объект и как заставить его перестать беспокоить браузер?

1 Ответ

1 голос
/ 04 апреля 2019

Это похоже на ошибку в Chrome.Это произойдет с любым XML-файлом, к которому вы перейдете (откроете) в Chrome, с которым не связано ни одной таблицы стилей.В этом случае Chrome (для своих внутренних целей) загружает изображение треугольника раскрытия из data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='%23909090' width='10' height='10'><path d='M0 0 L8 0 L4 7 Z'/></svg> - или пытается.

Если у вас нет политики CSP, Chrome загружает это data: изображение URLхорошо без ошибок.Но если у вас действительно есть политика CSP, и она не разрешает data: источники, тогда браузер заблокирует ее загрузку.

Есть способ, которым ваш CSP разрешает этоimage, но этот способ не безопаснее, чем указание 'unsafe-inline' в вашей политике.Способ заключается в том, чтобы включить data: в качестве источника для директивы img-src.Но это будет иметь эффект разрешения изображений с любого data: URL.

Обратите также внимание: конкретный data: URL, указанный в вопросе, не взят с www.w3.org.Любое изображение SVG в любом месте будет иметь эту xmlns='http://www.w3.org/2000/svg' часть.Это просто идентификатор пространства имен SVG.Таким образом, это не означает, что его подают с сайта www.w3.org, и не означает, что оно обязательно безопасно или безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...