Comments 3
сегодня накатил свежий 2.3.5-p1, config.xml уже выглядит так:
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<default>
<csp>
<mode>
<storefront>
<report_only>1</report_only>
</storefront>
<admin>
<report_only>1</report_only>
</admin>
</mode>
<policies>
<storefront>
<base>
<policy_id>base-uri</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</base>
<default>
<policy_id>default-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>1</eval>
<dynamic>0</dynamic>
</default>
<children>
<policy_id>child-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</children>
<connections>
<policy_id>connect-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</connections>
<manifests>
<policy_id>manifest-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</manifests>
<media>
<policy_id>media-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</media>
<objects>
<policy_id>object-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</objects>
<styles>
<policy_id>style-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</styles>
<scripts>
<policy_id>script-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>1</eval>
<dynamic>0</dynamic>
</scripts>
<images>
<policy_id>img-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</images>
<frames>
<policy_id>frame-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</frames>
<frame-ancestors>
<policy_id>frame-ancestors</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</frame-ancestors>
<forms>
<policy_id>form-action</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</forms>
<fonts>
<policy_id>font-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</fonts>
</storefront>
<admin>
<base>
<policy_id>base-uri</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</base>
<default>
<policy_id>default-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>1</eval>
<dynamic>0</dynamic>
</default>
<children>
<policy_id>child-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</children>
<connections>
<policy_id>connect-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</connections>
<manifests>
<policy_id>manifest-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</manifests>
<media>
<policy_id>media-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</media>
<objects>
<policy_id>object-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</objects>
<styles>
<policy_id>style-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</styles>
<scripts>
<policy_id>script-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>1</eval>
<dynamic>0</dynamic>
</scripts>
<images>
<policy_id>img-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</images>
<frames>
<policy_id>frame-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</frames>
<frame-ancestors>
<policy_id>frame-ancestors</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</frame-ancestors>
<forms>
<policy_id>form-action</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</forms>
<fonts>
<policy_id>font-src</policy_id>
<self>1</self>
<inline>1</inline>
<eval>0</eval>
<dynamic>0</dynamic>
</fonts>
</admin>
</policies>
</csp>
</default>
</config>
и ошибка отсутствует.
background: url(data:image/svg+xml;base64,............);
или
@font-face{font-family:«Foo Bar»;src:url('data:font/woff;base64,d0............);
Насколько я понял, в патче 2.3.5-p1 прописали директивы только для самой Magento. Все сторонние модули и кастомный контент всё так же "краснят" консоль сообщениями об ошибках. Сделал модуль, который принимает CSP-отчёты от браузера и автоматом генерит правила для добавления к CSP-заголовку — https://github.com/flancer32/mage2_ext_csp
Автоматом отслеживает нарушения полиси и генерирует соотв. правила. Убирает большинство ошибок с консоли. Но никакой аналитики там нет, поэтому правил получается довольно много (напрмер, img-src ws.sharethis.com
& img-src l.sharethis.com
можно было бы объединить в img-src *.sharethis.com
).
Так как CSP — это больше для девелоперов/админов, чем для конечных пользователей, то аналитика особо и не нужна. Мы можем и через SQL-запросы правила отредактировать. С той же img-src data:
решается добавлением вручную соответствующего правила:
INSERT INTO fl32_csp_rule (enabled, admin_area, type_id, source) VALUES(1, 0, 9, 'data:');
Там нюанс, что в отчётах data
просто идёт, а в правиле должно быть двоеточие в конце — data:
. Ну, в общем, т.к. я этот инструмент под себя делал, то поэтому без "напильника" никак. Но, может, кому и пригодится.
Content Security Policy в Magento 2