Ostatnio niektóre strony internetowe, takie jak Facebook, stosują Politykę bezpieczeństwa treści (CSP) w celu ograniczenia ładowania skryptów z „niezaufanych źródeł”. Na przykład podczas żądania treści HTML z Facebooka (np. Https://www.facebook.com ) odpowiedź HTTP Facebooka zawiera następujący nagłówek odpowiedzi:
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;
Ma to wpływ na niektóre bookmarklety, które wymagają ładowania i uruchamiania bibliotek JavaScript z niezaufanych źródeł.
Na przykład za każdym razem, gdy próbuję uruchomić bookmarklet Show Anchors na stronie na Facebooku, wykonanie tego bookmarkletu kończy się niepowodzeniem, ponieważ próbuje załadować jQuery z niezaufanego źródła. W konsoli programisty Chrome powie:
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".
Znalazłem stronę dokumentacji Chrome na ten temat, ale dotyczy ona tylko rozszerzeń Chrome .
Szukam rozwiązań, które mi na to pozwolą
- albo jednorazowo dezaktywuj CSP
- lub na stałe umieść na białej liście moje zaufane źródła.
źródło
Odpowiedzi:
Metody zatwierdzone przez aplikacje Chrome
Użyj bibliotek szablonów
Skorzystaj z biblioteki, która oferuje wstępnie skompilowane szablony i gotowe. Nadal możesz korzystać z biblioteki, która nie oferuje wstępnej kompilacji, ale będzie to wymagać trochę pracy z twojej strony i istnieją ograniczenia.
Będziesz musiał użyć piaskownicy, aby wyodrębnić dowolną zawartość, której chcesz dokonać „ewaluacji” rzeczy. Piaskownica podnosi CSP do określonej zawartości.
Lokalna zawartość w piaskownicy
Piaskownica pozwala na wyświetlanie określonych stron w piaskownicowym, unikalnym źródle. Strony te są następnie zwolnione z Polityki bezpieczeństwa treści. Strony w piaskownicy mogą używać ramek iframe, wbudowanych skryptów i eval () (a ostatnie dwa są blokowane). To naprawi „niebezpieczne-wbudowane” i „niebezpieczne-bezpieczne”.
Uzyskaj dostęp do zdalnych zasobów
Możesz pobrać zasoby zdalne za pomocą XMLHttpRequest i obsłużyć je za pomocą obiektów blob :, data: lub systemu plików: adresów URL. To powinno naprawić problem pobierania jQuery.
Wymóg manifestu
Aby móc wykonać cross-origin
XMLHttpRequests
, musisz dodać pozwolenie dla hosta zdalnego adresu URL.Pochodzenie krzyżowe
XMLHttpRequest
Pobierz zdalny adres URL do aplikacji i podaj jego zawartość jako
blob:
adres URL.Nie sądzę, żebyś mógł zrobić którąkolwiek z nich. Aby naprawić nagłówki
unsafe-eval
iunsafe-inline
odpowiedzi, tylko właściciel skryptu może naprawić kod lub jeśli jest to domena publiczna, możesz go naprawić. Wszystko to jest prawdopodobnie jednorazową poprawką.Hacki
Niebezpieczne okno
http://wiki.greasespot.net/UnsafeWindow
Zastrzyk skryptu treści
http://wiki.greasespot.net/Content_Script_Injection
Jednak włamania mają swoje wady, ponieważ z pewnością powodują dziury w zabezpieczeniach co najmniej pierwszego.
źródło
Możesz edytować te ustawienia na karcie treści, do której możesz uzyskać bezpośredni dostęp, wpisując
chrome://settings/content
w pasku adresu. Możesz dodać do białej listy określone domeny dla określonych typów treści.źródło