CSP (Политика безопасности контента) — это механизм защиты от XSS и других атак, который ограничивает источники загрузки скриптов, стилей и других ресурсов. Для Vue-приложений важно соблюдать CSP, особенно при использовании динамического рендеринга или инлайн-скриптов.
Проверьте HTTP-заголовки или мета-теги CSP вашего приложения. Пример CSP-заголовка:
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' https://cdn.example.com; style-src 'self' 'unsafe-inline';
Убедитесь, что политика не содержит излишне разрешающих директив, таких как 'unsafe-eval'
или 'unsafe-inline'
.
Vue использует инлайн-обработчики событий (например, @click
). Для CSP-совместимости:
import Vue from 'vue/dist/vue.runtime.esm.js';
Если используются динамические style
или class
:
scoped
стили в SFC (Single File Components).Убедитесь, что все внешние скрипты, стили и шрифты разрешены в CSP. Например:
script-src 'self' https://unpkg.com/vue@3.2.0;
Content-Security-Policy-Report-Only
для сбора ошибок без блокировки.eval()
: Замените на нативные методы или предварительную компиляцию.<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://unpkg.com/vue@3.2.0; style-src 'self' 'unsafe-inline'">
</head>
<body>
<div id="app"></div>
<script src="/dist/js/app.12345.js"></script> <!-- Предварительно собранный Vue-код -->
</body>
</html>
Для соответствия CSP в Vue-приложении необходимо минимизировать использование unsafe-*
директив, предварительно компилировать шаблоны, корректно настраивать источники ресурсов и тестировать политику в режиме report-only.