Con este ejemplo te mostramos cómo crear una cabecera para la política de seguridad de contenido y te explicamos qué se puede conseguir con ella:
Content-Security-Policy: "default-src 'none'; script-src 'self' *.example.com; style-src 'self'; img-src 'self' data:; font-src 'self' fonts.google.com; report-uri 'https://example.org/report.html' "
X-Content-Security-Policy: "default-src 'none'; script-src 'self' *.example.com; style-src 'self'; img-src 'self' data:; font-src 'self' fonts.google.com; report-uri 'https://example.org/report.html' "
X-WebKit-CSP: "default-src 'none'; script-src 'self' *.example.com; style-src 'self'; img-src 'self' data:; font-src 'self' fonts.google.com; report-uri 'https://example.org' "
En el ejemplo se observa que se ha añadido cada variante de CSP a la cabecera para poder abarcar al mayor número de navegadores posible. Dentro de los respectivos nombres de cabecera, el contenido es idéntico: las fuentes se van nombrando de manera sucesiva, las directivas se separan con un punto y coma y la sintaxis es siempre la misma. En realidad, solo varía el nombre del campo, por lo que el contenido puede duplicarse.
En primer lugar se establece que, a no ser que se haya definido de otra manera en una directiva, no se deben cargar datos de ninguna fuente (default-src). Con ello se cierra una brecha de seguridad. Siempre es conveniente definir primero default-src para así evitar que una directiva olvidada provoque una brecha en tu Content Security Policy.
El paso siguiente es definir la fuente desde la que se tienen que cargar los scripts (script-src). En el ejemplo se ha establecido que el navegador solo cargue scripts de la misma fuente y de example.com,incluidos todos los subdominios (la wildcard se adjudica mediante *). Además, también se indica que los clientes solo tienen permiso para cargar hojas de estilo desde la propia fuente (style-src) y, asimismo, también se permiten imágenes, pero solo desde la propia fuente y como URL de datos (img-src). Según nuestra cabecera de Content Security Policy, solo pueden cargarse tipos de letra del propio origen así como procedentes de la oferta de Google. Por último, en el ejemplo se ha indicado un lugar al que se deben enviar notificaciones en caso de que alguien intente incumplir el estándar de seguridad (report-uri).
Sin embargo, la cabecera no incluye todas las directivas, lo que no supone un problema, pues en el ejemplo adoptado no se necesitan otras whitelists y todas las fuentes se eliminan mediante default-src.