Content Security Policy

Для работы яндекс карты и других ее плагинов в ЦА в файл /modules/core/config/config.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",

Если у вас уже там существуют свои настройки, то ниже приведен отдельный список настроек для Яндекс

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

img-src

Для директивы img-src в список разрешенных источников необходимо добавить домены:

  • https://*.maps.yandex.net (для загрузки тайлов);

  • api-maps.yandex.ru (для загрузки курсоров и т. п.);

  • enterprise.api-maps.yandex.ru (для загрузки курсоров в платной версии API);

  • https://yandex.ru.

С этих доменов будут загружаться изображения API. Кроме того, некоторые изображения API вставляются через data:URL, поэтому в директиве img-src также необходимо указать протокол data:.

img-src data: https://*.maps.yandex.net api-maps.yandex.ru ...;

frame-src

В директиве frame-src должены быть разрешены домены

  • https://api-maps.yandex.ru

  • https://enterprise.api-maps.yandex.ru (для платной версии API)

С этих доменов будут загружаться компоненты API, которые размещаются во фреймах (например, блок «Открыть в Яндекс Картах»):

frame-src https://api-maps.yandex.ru ...;
frame-src https://enterprise.api-maps.yandex.ru ...;

Примечание

Директива frame-src используется в CSP версии 1.0; в версии 2.0 эта директива заменена на child-src. Однако некоторые браузеры еще не поддерживают CSP 2.0, поэтому для обеспечения кроссбраузерной совместимости в политике рекомендуется указывать обе эти директивы:

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 ...;

script-src

В директиве script-src нужно добавить следующие домены:

  • https://api-maps.yandex.ru

  • https://enterprise.api-maps.yandex.ru (для платной версии API)

  • https://suggest-maps.yandex.ru

  • https://*.maps.yandex.net

  • https://yandex.ru

  • https://yastatic.net

С этих доменов будут загружаться модули API. Кроме того, для работы с шаблонами в директиве script-src рекомендуется включить поддержку 'unsafe-eval’ (это необходимо для работы условных операторов).

script-src 'unsafe-eval' https://api-maps.yandex.ru
 https://suggest-maps.yandex.ru https://*.maps.yandex.net
 https://yandex.ru ...;

connect-src

Для директивы connect-src следует разрешить домены:

  • https://api-maps.yandex.ru

  • https://enterprise.api-maps.yandex.ru (для платной версии API)

  • https://suggest-maps.yandex.ru

  • https://*.maps.yandex.net

  • https://yandex.ru

  • https://*.taxi.yandex.net

connect-src https://api-maps.yandex.ru
 https://suggest-maps.yandex.ru https://*.maps.yandex.net
 https://yandex.ru ...;

style-src

Для загрузки стилей API в директиве style-src необходимо указать протокол blob:.

style-src: blob: ...;

API будет подключать стили на страницу через элемент <\link>, содержащий blob URL нужного стиля. Если в приложении использование blob невозможно, то для корректной работы с API в директиве style-src можно указать nonce-значение, сгенерированное на стороне клиента. В этом случае API будет подключать стили через inline-элемент <\style nonce="...">.

style-src 'nonce-<токен>' ...;

Это же значение следует передать в параметре csp при подключении API:

Для бесплатной версии API:

https://api-maps.yandex.ru/2.1/?apikey=<API-ключ>&lang=ru_RU&csp[style_nonce]=<токен>

Для платной версии API:

https://enterprise.api-maps.yandex.ru/2.1/?apikey=<API-ключ>&lang=ru_RU&csp[style_nonce]=<токен>

Следует иметь в виду, что атрибут nonce реализован в CSP 2.0 и не поддерживается в версии 1.0. Однако в некоторых браузерах еще не включена поддержка CSP 2.0, поэтому для обеспечения кроссбраузерной совместимости в style-src рекомендуется использовать протокол blob:.

Если для какого-либо ресурса API политика определена неправильно, то карта (либо ее объекты) будут отображаться некорректно. При этом API не отслеживает, для каких ресурсов политика задана неверно. Чтобы получить информацию о том, какие ресурсы карты не могут быть загружены, можно воспользоваться директивой report-uri.

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

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:;

Последнее обновление