Przewodnik po zasadach bezpieczeństwa treści

Ten dokument zawiera zalecenia dotyczące konfigurowania standardu Content Security Policy (CSP) w witrynie dla interfejsu Maps JavaScript API. Użytkownicy korzystają z wielu różnych typów i wersji przeglądarek, dlatego zachęcamy deweloperów do stosowania tego przykładu jako odniesienia i doprecyzowywania go, dopóki nie wystąpią kolejne naruszenia CSP.

Więcej informacji o Content Security Policy

Ścisły CSP

Zalecamy używanie rygorystycznego CSP zamiast dostawcy CSP na liście dozwolonych, aby zmniejszyć ryzyko ataków na bezpieczeństwo. Interfejs Maps JavaScript API obsługuje rygorystyczne CSP oparte na liczbach jednorazowych. Zarówno w przypadku elementów script, jak i style witryny muszą zawierać liczbę jednorazową. Wewnętrznie interfejs Maps JavaScript API znajdzie pierwszy taki element i zastosuje jego wartość jednorazową do stylu lub elementów skryptu wstawionych odpowiednio przez skrypt API.

Przykład

Poniższy przykład pokazuje przykładowy CSP wraz ze stroną HTML, na której jest umieszczony:

Przykładowa Content Security Policy

script-src 'nonce-{script value}' 'strict-dynamic' https: 'unsafe-eval' blob:;
img-src 'self' https://*.googleapis.com https://*.gstatic.com *.google.com *.googleusercontent.com data:;
frame-src *.google.com;
connect-src 'self' https://*.googleapis.com *.google.com https://*.gstatic.com data: blob:;
font-src https://fonts.gstatic.com;
style-src 'nonce-{style value}' https://fonts.googleapis.com;
worker-src blob:;

Przykładowa strona HTML

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="style.css" nonce="{style value}">
    <style nonce="{style value}">...</style>
    ...
  </head>
  <body>
    <div id="map"></div>
    <script src="https://maps.googleapis.com/maps/api/js?key=&callback=initMap" async nonce="{script value}"></script>
    <script nonce="{script value}"> function initMap() { ... } </script>
  </body>
</html>

CSP listy dozwolonych

Jeśli masz skonfigurowaną usługę CSP na liście dozwolonych, zapoznaj się z listą domen w Mapach Google. Zalecamy zapoznanie się z tym dokumentem i informacjami o wersji interfejsu Maps JavaScript API, aby być na bieżąco. W razie potrzeby dodaj wszystkie nowe domeny usługi do listy dozwolonych.

Witryny, które wczytują interfejs Maps JavaScript API ze starszej domeny interfejsów API Google (np. maps.google.com) lub z domeny regionalnej (np. maps.google.fr), muszą też zawierać te nazwy domen w swoim ustawieniu CSP script-src, jak pokazano w tym przykładzie:

script-src 'self' 'unsafe-inline' 'unsafe-eval' https://*.googleapis.com https://*.gstatic.com *.google.com https://*.ggpht.com *.googleusercontent.com blob:;
img-src 'self' https://*.googleapis.com https://*.gstatic.com *.google.com  *.googleusercontent.com data:;
frame-src *.google.com;
connect-src 'self' https://*.googleapis.com *.google.com https://*.gstatic.com  data: blob:;
font-src https://fonts.gstatic.com;
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
worker-src blob:;