> For the complete documentation index, see [llms.txt](https://support.morozovpimnev.ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://support.morozovpimnev.ru/megapost/content-security-policy.md).

# Content Security Policy

Для работы яндекс карты и других ее плагинов в ЦА в файл `/modules/core/config/config.php` нужно внести следующее:

{% code overflow="wrap" fullWidth="true" %}

```php
'backendContentSecurityPolicy' => "default-src 'self' www.hostcms.ru www.youtube.com youtube.com api-maps.yandex.ru; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: *.cloudflare.com *.kaspersky-labs.com api-maps.yandex.ru suggest-maps.yandex.ru *.maps.yandex.net yandex.ru yastatic.net; img-src 'self' chart.googleapis.com data: blob: www.hostcms.ru api-maps.yandex.ru *.maps.yandex.net yandex.ru; font-src 'self'; connect-src 'self' blob: api-maps.yandex.ru suggest-maps.yandex.ru *.maps.yandex.net yandex.ru *.taxi.yandex.net; style-src 'self' 'unsafe-inline' blob:; frame-src 'self' www.hostcms.ru api-maps.yandex.ru; child-src 'self' www.hostcms.ru api-maps.yandex.ru",
```

{% endcode %}

Если у вас уже там существуют свои настройки, то ниже приведен отдельный список настроек для [Яндекс](https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/dg/concepts/load#using-csp)

В таблице ниже приведены правила, которые необходимо добавить в политику приложения для работы c API. Правила перечисляются отдельно для каждой директивы. Обратите внимание на многоточия в примерах — это означает, что правила, необходимые для работы с API, приведены без учета других правил, которые разработчик может задать для своего приложения. Если для какой-либо директивы в политике будет разрешена загрузка из любых источников (например, 'img-src \*;'), то для этой директивы соответствующие правила API можно не задавать.

<table data-header-hidden><thead><tr><th width="159.5999755859375">Директива</th><th>Правила, которые требуется добавить в директиву</th></tr></thead><tbody><tr><td><code>img-src</code></td><td><p>Для директивы <code>img-src</code> в список разрешенных источников необходимо добавить домены:</p><ul><li><code>https://*.maps.yandex.net</code> (для загрузки тайлов);</li><li><code>api-maps.yandex.ru</code> (для загрузки курсоров и т. п.);</li><li><code>enterprise.api-maps.yandex.ru</code> (для загрузки курсоров в платной версии API);</li><li><code>https://yandex.ru</code>.</li></ul><p>С этих доменов будут загружаться изображения API. Кроме того, некоторые изображения API вставляются через data:URL, поэтому в директиве <code>img-src</code> также необходимо указать протокол <strong>data:</strong>.</p><pre><code>img-src data: https://*.maps.yandex.net api-maps.yandex.ru ...;
</code></pre></td></tr><tr><td><code>frame-src</code></td><td><p>В директиве <code>frame-src</code> должены быть разрешены домены</p><ul><li><code>https://api-maps.yandex.ru</code></li><li><code>https://enterprise.api-maps.yandex.ru</code> (для платной версии API)</li></ul><p>С этих доменов будут загружаться компоненты API, которые размещаются во фреймах (например, блок «Открыть в Яндекс Картах»):</p><pre><code>frame-src https://api-maps.yandex.ru ...;
frame-src https://enterprise.api-maps.yandex.ru ...;
</code></pre><p>Примечание</p><p>Директива <code>frame-src</code> используется в CSP версии 1.0; в версии 2.0 эта директива заменена на <code>child-src</code>. Однако некоторые браузеры еще не поддерживают CSP 2.0, поэтому для обеспечения кроссбраузерной совместимости в политике рекомендуется указывать обе эти директивы:</p><pre><code>frame-src https://api-maps.yandex.ru ...;
child-src https://api-maps.yandex.ru ...;
frame-src https://enterprise.api-maps.yandex.ru ...;
child-src https://enterprise.api-maps.yandex.ru ...;
</code></pre></td></tr><tr><td><code>script-src</code></td><td><p>В директиве <code>script-src</code> нужно добавить следующие домены:</p><ul><li><code>https://api-maps.yandex.ru</code></li><li><code>https://enterprise.api-maps.yandex.ru</code> (для платной версии API)</li><li><code>https://suggest-maps.yandex.ru</code></li><li><code>https://*.maps.yandex.net</code></li><li><code>https://yandex.ru</code></li><li><code>https://yastatic.net</code></li></ul><p>С этих доменов будут загружаться модули API. Кроме того, для работы с шаблонами в директиве <code>script-src</code> рекомендуется включить поддержку 'unsafe-eval’ (это необходимо для работы условных операторов).</p><pre><code>script-src 'unsafe-eval' https://api-maps.yandex.ru
 https://suggest-maps.yandex.ru https://*.maps.yandex.net
 https://yandex.ru ...;
</code></pre></td></tr><tr><td><code>connect-src</code></td><td><p>Для директивы <code>connect-src</code> следует разрешить домены:</p><ul><li><code>https://api-maps.yandex.ru</code></li><li><code>https://enterprise.api-maps.yandex.ru</code> (для платной версии API)</li><li><code>https://suggest-maps.yandex.ru</code></li><li><code>https://*.maps.yandex.net</code></li><li><code>https://yandex.ru</code></li><li><code>https://*.taxi.yandex.net</code></li></ul><pre><code>connect-src https://api-maps.yandex.ru
 https://suggest-maps.yandex.ru https://*.maps.yandex.net
 https://yandex.ru ...;
</code></pre></td></tr><tr><td><code>style-src</code></td><td><p>Для загрузки стилей API в директиве <code>style-src</code> необходимо указать протокол <strong>blob:</strong>.</p><pre><code>style-src: blob: ...;
</code></pre><p>API будет подключать стили на страницу через элемент &#x3C;\link>, содержащий blob URL нужного стиля. Если в приложении использование blob невозможно, то для корректной работы с API в директиве <code>style-src</code> можно указать nonce-значение, сгенерированное на стороне клиента. В этом случае API будет подключать стили через inline-элемент &#x3C;\style nonce="...">.</p><pre><code>style-src 'nonce-&#x3C;токен>' ...;
</code></pre><p>Это же значение следует передать в параметре <code>csp</code> при подключении API:</p><p>Для бесплатной версии API:</p><pre><code>https://api-maps.yandex.ru/2.1/?apikey=&#x3C;API-ключ>&#x26;lang=ru_RU&#x26;csp[style_nonce]=&#x3C;токен>
</code></pre><p>Для платной версии API:</p><pre><code>https://enterprise.api-maps.yandex.ru/2.1/?apikey=&#x3C;API-ключ>&#x26;lang=ru_RU&#x26;csp[style_nonce]=&#x3C;токен>
</code></pre><p>Следует иметь в виду, что атрибут <code>nonce</code> реализован в CSP 2.0 и не поддерживается в версии 1.0. Однако в некоторых браузерах еще не включена поддержка CSP 2.0, поэтому для обеспечения кроссбраузерной совместимости в <code>style-src</code> рекомендуется использовать протокол blob:.</p></td></tr></tbody></table>

Если для какого-либо ресурса API политика определена неправильно, то карта (либо ее объекты) будут отображаться некорректно. При этом API не отслеживает, для каких ресурсов политика задана неверно. Чтобы получить информацию о том, какие ресурсы карты не могут быть загружены, можно воспользоваться директивой [report-uri](https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives#report-uri).

Ниже приведен пример политики, в которой определены правила для работы с API, а также другие правила приложения:

{% code fullWidth="true" %}

```
Content-Security-Policy:
  img-src data: https://*.maps.yandex.net https://api-maps.yandex.ru https://yandex.ru 'self';
  child-src https://api-maps.yandex.ru;
  frame-src https://api-maps.yandex.ru;
  script-src https://api-maps.yandex.ru https://suggest-maps.yandex.ru http://*.maps.yandex.net https://yandex.ru https://yastatic.net 'self';
  connect-src https://api-maps.yandex.ru https://suggest-maps.yandex.ru https://*.maps.yandex.net https://yandex.ru https://*.taxi.yandex.net;
  style-src blob:;
```

{% endcode %}
