# 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://support.morozovpimnev.ru/megapost/content-security-policy.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
