Чем мы можем помочь?

Кратко опишите вопрос; мы ответим по электронной почте.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
На главную

Безопасность и Content Security Policy

Какие директивы CSP нужны виджету, почему он работает без встроенного скрипта и unsafe-inline, как изолирован от страницы и каким секретам никогда не место в браузере.

Content Security Policy

Виджет не загружает сторонние шрифты и пиксели отслеживания, не выполняет eval. Стили задаются создаваемыми таблицами стилей (adoptedStyleSheets) в shadow DOM; на них style-src не распространяется. Поэтому unsafe-inline и unsafe-eval не нужны.

С адресами reactive.chat:

Content-Security-Policy:
  script-src 'self' https://cdn.reactive.chat;
  connect-src 'self' wss://ws.reactive.chat https://ws.reactive.chat;
  img-src 'self' data: https:;

С собственным доменом:

Content-Security-Policy:
  script-src 'self' https://chat.your-company.com;
  connect-src 'self' wss://chat.your-company.com https://chat.your-company.com;
  img-src 'self' data: https:;

Отдельные директивы:

Старые браузеры без создаваемых таблиц стилей (например, Safari до 16.4) используют <style>, который строгая style-src блокирует. Виджет работает, но без оформления.

Встроенный скрипт не нужен

Установка состоит только из <script src> с атрибутами. Свои вызовы (identify, track, open) размещайте в файлах скриптов или встроенном скрипте с nonce:

<script nonce="R4nd0mN0nc3">
  ReactiveChat('identify', { userId: '4711', userHash: '…', exp: 1792503600 });
</script>

Шаблон без встроенного скрипта: Идентификация посетителей.

Subresource Integrity

У loader.js нет номера версии в имени, он постоянно обновляется; атрибут integrity отключит чат при следующем обновлении. Ядро загружается с хешем содержимого в имени (Архитектура). Если политика требует SRI, предоставляйте loader.js сами и задайте data-rc-ws-url (Быстрый старт); обновление тогда тоже ваша задача.

Изоляция от страницы

Проверка источника

Подключение чата принимается только с доменов проекта в Разрешённых источниках (с поддоменами). Сторонняя страница, скопировавшая ключ сайта, получает origin_denied. Если список пуст, проверки нет; всегда вводите домены. Подробнее: Транспорт.

Сам ключ сайта не секрет: находится в исходном коде каждой страницы.

Чему никогда не место в браузере

Также не в приложении, публичном репозитории или адресе страницы.

Защита от злоупотреблений

Сервер ограничивает подключения, кадры и сообщения на соединение и адрес и блокирует при повторных нарушениях (закрытие 1008). За собственным прокси считает по адресу посетителя, только если ключ прокси правильный; иначе все делят адрес прокси. Значения: Ограничения и квоты.

Далее: Собственный домен

Обновлено: