16

В последнее время некоторые веб-сайты, такие как Facebook, используют политику защиты контента (CSP) для ограничения загрузки сценариев из "ненадежных источников". Например, при запросе HTML-контента Facebook (например, https://www.facebook.com ) HTTP-ответ Facebook включает в себя следующий заголовок ответа:

x-webkit-csp:default-src *;script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net;style-src * 'unsafe-inline';connect-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.spotilocal.com:* https://*.akamaihd.net ws://*.facebook.com:* http://*.akamaihd.net;

Это влияет на некоторые закладки, которые требуют загружать и запускать библиотеки Javascript из ненадежных источников.

Например, всякий раз, когда я пытаюсь запустить букмарклет Show Anchors на странице Facebook, выполнение этого букмарклета завершается неудачно, так как он пытается загрузить jQuery из ненадежного источника. В консоли разработчика Chrome будет сказано:

Refused to load the script 'http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js' because it violates the following Content Security Policy directive: "script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net".

Я нашел страницу документации Chrome по этой теме, но она относится только к расширениям Chrome.

Я ищу решения, которые позволяют мне

  • либо на один раз отключить CSP
  • или постоянный белый список моих доверенных источников.

2 ответа2

2

Методы, одобренные приложениями Chrome

Используйте библиотеки шаблонов

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

Вам нужно будет использовать «песочницу», чтобы изолировать любой контент, с которым вы хотите сделать что-то «полезное». Песочница поднимает CSP на указанном вами контенте.

Песочница локального содержания

«Песочница» позволяет указанным страницам обслуживаться в изолированном, уникальном источнике. Эти страницы затем освобождаются от их Политики безопасности контента. Страницы с песочницей могут использовать iframes, встроенные сценарии и eval() (и последние две являются предотвращаемыми). Это исправит «unsafe-inline» и «unsafe-eval».

  • Используйте встроенные скрипты в песочнице
  • Включить песочницу в манифест

Доступ к удаленным ресурсам

Вы можете извлекать удаленные ресурсы через XMLHttpRequest и обслуживать их с помощью blob:, data: или filesystem: URL. Это должно исправить проблему выборки jQuery.

Требование к манифесту

Чтобы иметь возможность выполнять XMLHttpRequests , вам нужно добавить разрешение для хоста удаленного URL.

Перекрестное происхождение XMLHttpRequest

Извлеките удаленный URL в приложение и предоставьте его содержимое в виде blob: URL.


Я не думаю, что вы можете сделать что-нибудь из этого. Чтобы исправить заголовки ответов unsafe-eval и unsafe-inline , только владелец сценария может исправить код или, если он находится в свободном доступе, вы можете исправить его. Все это, вероятно, единовременное исправление.


Хаки

UnsafeWindow

http://wiki.greasespot.net/UnsafeWindow

Внедрение скрипта контента

http://wiki.greasespot.net/Content_Script_Injection


У хаков, однако, есть свои недостатки, поскольку они, как известно, вызывают дыры в безопасности, по крайней мере, в первой.

0

Вы можете редактировать эти настройки на вкладке контента, к которой вы можете получить прямой доступ, набрав chrome://settings/content в адресной строке. Вы можете внести в белый список определенные домены для определенных типов контента.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .