Политика безопасности контента внутри iframe влияет на всю страницу в Firefox - PullRequest
3 голосов
/ 13 июня 2019

У меня есть ситуация, когда у объявления есть определение CSP внутри iframe. В Chrome проблем нет, но в Firefox после загрузки рекламы CSP влияет на всю страницу, и я не могу загрузить другие ресурсы.

Вы можете увидеть проблему с этим примером:

<html>
<head>
    <script>

        function getScript(url) {
            let tag = document.createElement('script');
            tag.src = url;
            tag.onload = () => document.getElementById('console').innerHTML += url + " loaded<br>";
            document.body.appendChild(tag);
        }
        function getFromCdnFirst() {
            getScript('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.js');
        }

        function getFromCdnSecond() {
            getScript('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.slim.min.js');
        }

        function getIframeWithCSP() {
            var doc = document.getElementById('iframe').contentWindow.document;
            doc.open();
            doc.write('<html><head><meta http-equiv="Content-Security-Policy" content="script-src https://cdn.ampproject.org/;object-src '+"'none';child-src blob:;frame-src 'none'" + '"></head><body>Test</body>');
            doc.close();
        }

    </script>
</head>

<body>
    <iframe id="iframe"></iframe><br>
    <button onClick="getFromCdnFirst()">Get script</button><br>
    <button onClick="getIframeWithCSP()">Get CSP</button><br>
    <button onClick="getFromCdnSecond()">Get script</button><br>
<div id="console">
</div>
</body>

Также доступно здесь: https://jsfiddle.net/54Luhjan/1/

После того, как вы нажали первую кнопку, загрузилась js, вторая ссылка вставляет CSP в iframe, и после этого скрипты не могут быть загружены - CSP предотвращает это.

Есть ли у вас какие-либо идеи о том, что можно сделать, чтобы внешний CSP не повредил мою страницу?

Это ошибка Firefox?

1 Ответ

2 голосов
/ 14 июня 2019

Я запускал Мозрегрессия поверх бета-версий и ночных сборок Firefox. Похоже, что jsfiddle успешно загружает вещи при третьем нажатии кнопки, начиная со сборок, которые содержат исправления из ошибки Mozilla 965637 , которая приземлилась в стволе 2019-05-21 (21 мая 2019) .

Так что это ошибка в Firefox 67 (и, возможно, в более ранних версиях), но с тех пор она исправлена, и это исправление будет включено в Firefox 69, запланированный на 2019-09-03 (3 сентября 2019) .

К сожалению, однако, исправление не было сделано вовремя, чтобы попасть в ветку для Firefox 68, поэтому ошибка все равно будет присутствовать в выпуске Firefox 68, запланированном на 2019-07-09 (9). Июль 2019 года) .

...