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.ruhttps://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.ruhttps://enterprise.api-maps.yandex.ru(для платной версии API)https://suggest-maps.yandex.ruhttps://*.maps.yandex.nethttps://yandex.ruhttps://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.ruhttps://enterprise.api-maps.yandex.ru(для платной версии API)https://suggest-maps.yandex.ruhttps://*.maps.yandex.nethttps://yandex.ruhttps://*.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:;Последнее обновление