Nagłówek odpowiedzi HTTP Content-Security-Policy pozwala stronie kontrolować, które zasoby użytkownik ładuje dla danej strony. Z wyjątkiem wyjątkowych przypadków, zestaw zasad polega głównie na określaniu punktów końcowych serwera źródłowego i skryptu. Pomoże to powstrzymać ataki skryptowe na różne strony
Dokumentacja:Logowanie do linku jest widoczne.
Ten artykuł opisuje Politykę Bezpieczeństwa Treści W3C, w skrócie CSP. Jak sama nazwa wskazuje, ta specyfikacja dotyczy bezpieczeństwa treści i służy głównie do określenia, które zasoby może się ładować na stronie, oraz do ograniczenia występowania XSS.
Wczesne Chrome obsługiwało CSP za pomocą nagłówka odpowiedzi X-WebKit-CSP, podczas gdy Firefox i IE wspierały X-Content-Security-Policy, a Chrome25 i Firefox23 zaczęły wspierać standardową Content-Security-Policy.
Mogą być zbierane wrażliwe informacje o aplikacjach internetowych, takie jak nazwy użytkowników, hasła, nazwy maszyn i/lub wrażliwe lokalizacje plików Początkujący użytkownicy mogą być zachęcani do podania wrażliwych informacji, takich jak nazwy użytkowników, hasła, numery kart kredytowych, numery ubezpieczenia społecznego itp
Najpierw stwórzmy nowy projekt ASP.NET MVC, utwórzmy nowy skrypt js i dynamicznie załadujmy kod js statystyk Baidu, w następujący sposób:
Jak pokazano na powyższym rysunku, możemy zobaczyć kod skryptu JS, który został pomyślnie wprowadzony do firmy trzeciej (Baidu), jeśli w JS zewnętrznej firmy znajduje się złośliwy kod, taki jak kradzież ciasteczek, modyfikowanie treści, przeskakiwanie linków itp.
Jak mogę powstrzymać wprowadzanie niebezpiecznych skryptów JS firm trzecich?
Obejście
Głowica odpowiedziDodaj "Content-Security-Policy"na przykład:
Dyrektywa | Przykład wartości instrukcji | Ilustrują | default-src | 'ja' cnd.a.com | Zdefiniuj domyślną politykę ładowania dla wszystkich typów zasobów (JS, IMAGE, CSS, WEB FONT, AJAX requests, iframes, multimedia itd.) i użyj domyślnej dla określonych typów zasobów, jeśli nie ma odrębnej zdefiniowanej polityki. | script-src | 'ja' js.a.com | Zdefiniuj politykę ładowania JavaScript. | Style-SRC | 'ja' css.a.com | Zdefiniuj politykę ładowania dla stylu. | IMG-SRC | 'ja' img.a.com | Zdefiniuj politykę ładowania dla obrazów. | connect-src | 'ja' | Polityki ładowania żądań z Ajax, WebSockets itd. Jeśli nie jest to dozwolone, przeglądarka symuluje odpowiedź ze statusem 400. | font-src | font.a.com | Polityka ładowania WebFont. | object-src | 'ja' | <object><embed> <applet> Wprowadzono politykę ładowania wtyczek takich jak flash dla tagów takich jak , lub . | media-src | media.a.com | <audio> <video> Strategie ładowania multimediów HTML wprowadzone dla tagów takich jak lub . | Frame-SRC | 'ja' | Polityka ładowania klatek. | Piaskownica | Formy dopuszczające | Włącz sandbox (podobny do właściwości sandboxa w iframe) dla żądanego zasobu. | Raport-uri | /report-uri | Poinformuj przeglądarkę, na jaki adres ma przesłać dane logowe, jeśli żądany zasób nie jest dozwolony przez politykę. Specjalne: Jeśli chcesz, aby przeglądarka raportowała tylko logi i nic nie blokowała, możesz użyć nagłówka Content-Security-Policy-Report-Only. |
Zmodyfikujmy plik web.config projektu, aby dodać niestandardowy nagłówek odpowiedzi w następujący sposób:
Ponownie uruchom projekt zgodnie z poniższym:
Przeglądarka skutecznie zablokowała ładowanie skryptów js firm trzecich:
Odmówił załadowania skryptu 'https://hm.baidu.com/hm.js?6dbaac17dfeb2840b5b09d2dff6d2319', ponieważ narusza on następującą dyrektywę Polityki Bezpieczeństwa Treści: "script-src 'self' http://localhost:56888/ ". Należy zauważyć, że 'script-src-elem' nie zostało ustawione wprost, więc jako alternatywa używa się 'script-src'. (Koniec)
|