Мы вынуждены использовать unsafe-inline в нашем CSP при использовании Vue.JS? - PullRequest
1 голос
/ 15 октября 2019

Есть ли способ заставить Vue.js правильно работать с CSP?

Когда я запускаю свое приложение spa (полученное в результате npm run generate с Nuxt.js), я получу несколько предупреждений, таких каккак эти:

Отказался от применения встроенного стиля, поскольку он нарушает следующую директиву политики безопасности содержимого: "style-src 'self' 'строго-динамический' 'nonce-124lk5fjOc4jn7qqLYEsG2jEvxYuqu8J' 'unsafe-inline' https:». Обратите внимание, что «unsafe-inline» игнорируется, если в списке источников присутствует значение хеша или одноразового номера.

Зная CSP , существует два правильных способа исправить это:

  1. Использование одноразовых номеров, где Vue.js должен подписывать все созданные сценарии и стили с атрибутом nonce. Но я не думаю, что это что-то решит, так как кажется, что какой-то CSS добавлен в строку.

  2. Использование хэшей, что на самом деле является предпочтительным способом сделать это, так как хеш защищает точното, что мы хотим, чтобы клиент выполнял в браузере.

Однако для использования хешей Vue.js / Webpack должен иметь возможность вычислять хеш для всех своих сценариев и стили и:

  • для каждой компиляции, сообщите об этом разработчику, который затем добавит эти хэши в файл конфигурации NGINX,

или

  • может генерировать метатеги , содержащие хэши, что делает этот процесс на 100% прозрачным для разработчика, который этого не делаетнужно настроить что-нибудь еще, чтобы гарантировать хорошую защиту CSP.

Поддерживает ли Vue.js это каким-либо образом? Есть ли кто-нибудь в мире, кто мог заставить CSP работать с Vue.js без «unsafe-inline»?

1 Ответ

3 голосов
/ 16 октября 2019

Согласно документации Vue.js , сборка во время выполнения полностью совместима с CSP.

Nuxt поддерживает конфигурацию csp для создания хэшей через отправленный веб-пакетв качестве заголовка в динамическом режиме SSR и метаэлементах (см. https://github.com/nuxt/nuxt.js/pull/5354)

...