Ишь ты, советник нашелся
Давеча пришел клиент со следующей жалобой: «Пользователи ставят расширение Советник.Яндекс и уходят на сайты конкурентов, следуя за более низкой ценой».
TL;DR:
- Настройте CSP-заголовки
- Настроили? Ужесточите политики.
И правда, при переходе на страницу товара с включенным расширением, происходил рендеринг спец. желтой панельки в шапке страницы с дополнительными предложениями. Достаточно возмутительно, вы не находите?
Однако, бороться с этим можно. Надо лишь настроить Content Security Policy. Это политики безопасности контента, кто не в курсе. Так я и сделал. Полез на один из своих сайтов и оттуда скопировал преднастроенные доп. заголовки для типа содержимого HTML в MODX на сайт клиента.
В огнелисе все прекрасно заработало (т.е. сломалось), но в хроме ситуация была немного иная. Желтая панель пропала; при клике на иконку расширения, оно продолжило «давать советы» в отдельной модалке.
Если вы разрабатывали расширения для хрома, то знаете, что под каждый аддон хром выделяет отдельный процесс в котором расширение может выполнять собственные скрипты. Это если на пальцах. Очень крутая фишка.
Пришлось немного подробнее почитать про CSP и поэкспериментировать. В доке (https://content-security-policy.com/) и спеке (https://www.w3.org/TR/CSP2/#directive-sandbox) я наткнулся на директиву sandbox. Достаточно еще больше ужесточить политики, убрав значение allow-same-origin.
Теперь сайт запустился в «песочнице» и Яндекс больше не смог ничего посоветовать. Здесь стоит отметить, что придется проверить работоспособность скриптов и произвести доп. настройки:
- Вся статика и ответы сервера должны отдавать заголовок
Access-Control-Allow-Origin '*'; - Если вы работе с
canvas, то изображения, что рисуются, должны иметь свойствоpic.crossOrigin = «Anonymous»;
Возможно есть еще кейсы по доп. настройкам. Я больше проблем не встретил. Примеры политик также можно найти по первой ссылке. Там все достаточно подробно описано.
Также набросал специальный пакетик: modCSP. Он патчит типы содержимого, добавляя используемые нами политики. Появится на выходных в репозитории клуба.