Content Security Policy para WordPress

En la WordCamp Valencia hoy estoy presentando un tema relativamente nuevo y que desde hace poco estoy comenzando a poner en marcha en la mayoría de mis sitios web: el Content Security Policy.

La presentación Content Security Policy (PDF 3.5 MB) ya está disponible e intenta hacer un repaso del porqué de la existencia de estas cabeceras HTTP que están focalizadas principalmente a un único tema: la seguridad.

Para comenzar hay que tener presente que 3/4 de los ataques que se producen hoy en día afectan de alguna manera al alojamiento web, principalmente porque son ataques que se ejecutan allí. La mayoría, además, tienen que ver con los sitios web. Teniendo en cuenta estos ataques XSS (Cross-Site Scripting) los CSP tienen como finalidad decirle al cliente qué puede o no descargar de sitios externos.

El ejercicio más simple de cabecera sería esta:

Content-Security-Policy: default-src 'self' https:;

Aunque para mi hay un código que “me representa”:

Content-Security-Policy: upgrade-insecure-request;

Esta línea de código convierte todas las peticiones HTTP en HTTPS por defecto. De esta forma, por ejemplo, si haces un cambio de HTTP a HTTPS pero tienes elementos dentro de tu sitio web “a pelo” con http:// y no https:// o, directamente, comenzando las URL con //, te sale el “candado amarillo” quejándose de que algo no va bien, pero esta línea lo acabaría convirtiendo en “candado verde”.

Para WordPress hay algunos plugins interesantes a revisar:

Además de muchas herramientas útiles:

Además, existe la posibilidad (para comenzar a probar sin romper nada) de usar el método Report-Only. Un ejemplo básico de lo que podría ser la cabecera para este sitio:

Content-Security-Policy-Report-Only upgrade-insecure-requests; base-uri www.casares.blog; default-src 'self' data: 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; font-src 'self'; form-action 'self'; frame-ancestors 'self'; frame-src 'self' *.wordpress.org; img-src 'self' data: *.gravatar.com; manifest-src 'self'; media-src 'self'; object-src 'none'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; worker-src 'self';

Si quieres saber más, revisa la página del W3C sobre CSP y la página de MDN sobre CSP.

Categorías WordPress

Deja un comentario