Политика безопасности контента для расширений и букмарклетов
Github имеет следующую политику безопасности содержимого:
Content-Security-Policy: default-src *; script -src assets-cdn.github.com www.google-analytics.com collector-cdn.github.com; object-src assets-cdn.github.com; стиль-Src 'self' 'unsafe-inline' 'unsafe-eval' assets-cdn.github.com; IMG-Src 'self' data: 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, но я не знаю, с чего начать... спасибо
Edit:
Поскольку люди запрашивают код в комментариях, наш букмарклет загружается с помощью этого 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()
})
})()
Если я попытаюсь запустить этот букмарклет на средней странице с CSP, я получаю следующую ошибку.
Отказался от загрузки script'http://localhostssss.com:9000/assets/js/backbone/views/clipping/clippinglocal.js' потому что он нарушает следующую директиву политики безопасности контента: "script -src 'небезопасно-eval' 'небезопасно-inline' о: https://.akamaihd.net http://.baidu.com https://bitly.comhttps://.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.iohttps://.medium.com https://myspace.com https://.pinterest.com https://www.readability.com https://thinkery.me https://this.cmhttps://.twitter.com https://use.typekit.net https://*.instapaper.com" Я".
Может ли кто-нибудь сказать мне, как сделать наш букмарклет загруженным на таких сайтах, как Medium или Github, которые имеют политику CSP.
Я не могу так много говорить о расширениях браузера, потому что я еще не работал над этим, и человека здесь нет. Я просто знаю, что у нас одна и та же проблема, и наши расширения браузера - это в основном тот же код, что и наши букмарклеты, за исключением того, что он немного приспособлен для установки в оболочку расширения браузера. Если вы можете отвечать только за случай букмарклета, я буду в порядке и согласен с ответом, но любой намек на расширения браузера тоже будет приятным:)
Ответы
Ответ 1
Может ли политика CSP предотвращать приложение букмарклета или приложение расширения браузера, например загрузчик клипов?
Это очень просто: расширение или букмарклет будут заблокированы, если это нарушит CSP.
Итак, если CSP блокирует все встроенные script, никакой букмарклет не будет работать. Github делает это с media-src
, потому что по существу существующая директива media-src блокирует встроенный script по умолчанию. Поэтому ни один букмарклет не может работать на Github.
(В качестве побочной заметки, хотя все браузеры работают таким образом, это не то, о чем говорят стандарты. Bookmarklets на самом деле освобождаются от CSP, но, к сожалению, ни один браузер не удосужился этого разрешить.)
Теперь, что касается того, какие расширения будут работать или не будут работать, это зависит от того, как работает само расширение. Расширения не могут быть напрямую заблокированы CSP, но если расширение пытается сделать что-либо, что нарушает CSP, оно может выйти из строя. Итак, в Github, если расширение пытается добавить собственный script в DOM страницы или пытается добавить внешний script к DOM страницы из неутвержденного местоположения или выполнить любые другие ограниченные вещи, описанные в CSP, он может выйти из строя.
Итак, какая часть расширения Evernote вызывает ошибку CSP и как Pocket делает аналогичное задание, не вызывая ошибки? Я не знаю. Все зависит от конкретных деталей того, как эти приложения написаны. Скорее всего, довольно просто посмотреть на их код и попытаться понять это. Насколько я знаю, все расширения Chrome написаны на JavaScript и упакованы в виде zip файла - только с другим расширением файла. Я считаю, что то же самое относится и к дополнениям Firefox.