Политика безопасности контента для расширений и букмарклетов

Github имеет следующую политику безопасности контента:

Политика безопасности содержимого:default-src *; script-src assets-cdn.github.com www.google-analytics.com collector-cdn.github.com; object-src assets-cdn.github.com; style-src 'self' 'unsafe-inline' 'unsafe-eval' assets-cdn.github.com; img-src "собственные" данные: assets-cdn.github.com identicons.github.com www.google-analytics.com collector.githubapp.com *.githubusercontent.com *.gravatar.com *.wp.com; media-src 'none'; frame-src 'self' render.githubusercontent.com www.youtube.com player.vimeo.com checkout.paypal.com; font-src assets-cdn.github.com; connect-src 'self' ghconduit.com:25035 live.github.com uploads.github.com s3.amazonaws.com

Мы можем обрезать / извлечь контент из Интернета с помощью расширений браузера, таких как Evernote или Pocket.

Я не вижу никаких ссылок на Pocket или Evernote в этой политике Github. Может кто-нибудь объяснить, почему расширение Pocket может извлекать контент из Github, а расширение Evernote - нет, с ошибкой CSP)

Может ли политика CSP предотвратить загрузку приложения букмарклет или расширения браузера, такого как клипер? Если да, то как Pocket может заставить их расширение работать с любым контентом?

У нас есть эта проблема в наших букмарклетах / расширениях, и я хотел бы, чтобы они работали так же гладко, как расширение Pocket, но я не знаю, с чего начать... спасибо


Изменить: так как люди просят код в комментариях, наш букмарклет загружается с этим javascript:

javascript: (function() {
    function loadScript(a, b) {
        var c = document.createElement('script');
        c.type = 'text/javascript';
        c.src = a;
        var d = document.getElementsByTagName('head')[0],
            done = false;
        c.onload = c.onreadystatechange = function() {
            if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
                done = true;
                b()
            }
        };
        d.appendChild(c)
    }
    loadScript('http://localhostsss.com:9000/assets/js/backbone/views/clipping/clippinglocal.js', function() {
        s.clipping.initClipping()
    })
})()

Если я пытаюсь запустить этот букмарклет на странице Medium с CSP, я получаю следующую ошибку.

Отказался загружать скрипт ' http://localhostssss.com:9000/assets/js/backbone/views/clipping/clippinglocal.js', поскольку он нарушает следующую директиву политики безопасности содержимого: "script-src 'unsafe-eval' ' unsafe-inline 'about: https: //.akamaihd.net http: //.baidu.com https://bitly.com/ https: //.cloudfront.net https: //.facebook.com https: //. facebook.net https://getpocket.com/ https: //.github.com https: //.googleapis.com https://ssl.google-analytics.com/ https://app.greenhouse.io/ https: //.medium.com https://myspace.com/ https: //.pinterest.com https://www.readability.com/ https://thinkery.me/ https://this.cm/ https: //.twitter.com https://use.typekit.net/ https://*.instapaper.com 'self'".

Может кто-нибудь сказать мне, как сделать наш букмарклет загружаемым на таких сайтах, как Medium или Github, которые имеют политику CSP.

Я пока не могу так много говорить о расширениях браузера, потому что я еще не работал над ним, а этого человека нет. Я просто знаю, что у нас та же проблема, и наши расширения для браузера - это в основном тот же код, что и для наших букмарклетов, за исключением того, что он немного адаптирован для использования в оболочке расширения для браузера. Если вы можете ответить только за случай с букмарклетом, я буду в порядке и приму ответ, но любая подсказка для расширений браузера тоже будет полезна:)

1 ответ

Решение

Может ли политика CSP предотвратить загрузку приложения букмарклет или расширения браузера, такого как клипер?

Это очень просто: расширение или букмарклет будут заблокированы, если они нарушат CSP.

Таким образом, если CSP блокирует весь встроенный скрипт, никакой букмарклет работать не будет. Github делает это с media-src потому что просто существующая директива media-src блокирует встроенный скрипт по умолчанию. Так что никакой букмарклет не может работать на Github.

(В качестве дополнительного примечания, хотя все браузеры работают таким образом, стандарты не должны соответствовать этим требованиям. Букмарклеты на самом деле должны освобождать от CSP, но, к сожалению, ни один браузер не потрудился разрешить это.)

Теперь о том, какие расширения будут работать или не работать, зависит от того, как работает само расширение. CSP не может напрямую блокировать расширения, но, если расширение пытается сделать что-либо, что нарушает CSP, оно может завершиться сбоем. Так, на Github, если расширение пытается добавить собственный сценарий в DOM страницы, или пытается добавить внешний сценарий к DOM страницы из неутвержденного местоположения, или выполняет какие-либо другие ограниченные действия, описанные в CSP, оно может завершиться неудачно.,

Итак, какая часть расширения Evernote вызывает ошибку CSP и как Pocket выполняет аналогичную работу, не вызывая ошибки? Я не знаю. Все зависит от конкретных деталей написания этих приложений. Скорее всего, довольно просто взглянуть на их код и попытаться понять его. Насколько я знаю, все расширения Chrome написаны на JavaScript и упакованы в виде zip-файла - просто с другим расширением. Я верю, что то же самое относится и к аддонам Firefox.