Как стать автором
Обновить

Комментарии 3

Доброго времени суток,

сегодня накатил свежий 2.3.5-p1, config.xml уже выглядит так:
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:. Ну, в общем, т.к. я этот инструмент под себя делал, то поэтому без "напильника" никак. Но, может, кому и пригодится.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.