Proteja su sitio web de los ataques de click-jacking implementando la cabecera CSP (Política de Seguridad de Contenidos)

CSP es una de las 10 principales cabeceras seguras de OWASP y a menudo es recomendada por expertos en seguridad o herramientas para implementarla. Hay muchas opciones para construir la política para hacer cumplir la forma en que desea exponer sus recursos web.

Una de las directivas llamadas frame-ancestors que se introdujeron en la versión 2 de CSP ofrece más flexibilidad en comparación con la cabecera X-Frame-Options. frame-ancestors funciona de la misma manera que X-Frame-Options para permitir o no que los recursos se incrusten utilizando elementos iframe, frame, object, embed y applet.

Creo que X-Frame-Options quedará obsoleto en un futuro próximo, cuando CSP sea totalmente compatible con los principales navegadores. Mientras escribo, los anclajes de marco de CSP funcionan con todas las últimas versiones de navegadores excepto IE.

No sé cuándo permitirá Microsoft la compatibilidad con IE. Siempre puede comprobar la compatibilidad de los navegadores en el sitio Can I Use.

Veamos el siguiente procedimiento de implementación.

Apache HTTP

mod_headers es el requisito previo para inyectar cualquier cabecera en Apache. Depende del SO y la versión pero si está usando Ubuntu y Apache 2.4 entonces puede usar a2enmod headers para habilitarlo.

root@geekflare:/etc/apache2# a2enmod headers
Habilitación de las cabeceras del módulo.
Para activar la nueva configuración, necesita ejecutar
  systemctl restart apache2
root@geekflare:/etc/apache2# systemctl restart apache2
root@geekflare:/etc/apache2#

Nota: toda la configuración la puede hacer en el archivo httpd.conf o en cualquier archivo de configuración efectivo que esté utilizando.

DENY de TODO

Similar a X-Frame-Options DENY. Si no desea que ningún sitio (incluido el propio) se incruste, añada lo siguiente.

Header set Content-Security-Policy "frame-ancestors 'none';"

Guarde el archivo y reinicie el Apache HTTP para que surta efecto.

Intenté incrustar el sitio y como puede ver se bloqueaba.

Permitir desde uno mismo pero DENEGAR a los demás

De forma similar a X-Frame-Options SAMEORIGIN, puede añadir lo siguiente.

Header set Content-Security-Policy "frame-ancestors 'self';"

Permitir desde uno mismo y múltiples dominios

X-Frame-Options no tenía una opción para permitir desde múltiples dominios. Gracias a CSP, puede hacerlo como se indica a continuación.

Header set Content-Security-Policy "frame-ancestors 'self' 'geekflare.com/es' 'gf.dev' 'geekflare.dev';"

Lo anterior permitirá incrustar el contenido desde self, geekflare.com/es, gf.dev, geekflare.dev. Cambie estos dominios por los suyos.

Nginx

El concepto y la directiva son los mismos que los explicados anteriormente en la sección HTTP de Apache, excepto por la forma de añadir la cabecera. Las cabeceras en Nginx deben añadirse bajo el bloque del servidor en el archivo de configuración correspondiente.

DENEGAR todo

add_header Content-Security-Policy "frame-ancestors 'none';";

DENY todo pero no a sí mismo

add_header Content-Security-Policy "frame-ancestors 'self';";

Permitir desde varios dominios

add_header Content-Security-Policy "frame-ancestors 'tu-sitio.com' 'ejemplo.com';";

El ejemplo anterior permitirá incrustar contenido en yoursite.com y example.come. Tras realizar los cambios, no olvide reiniciar el servidor Nginx para probar la política.

WordPress

Depende de cómo aloje WordPress.

Si es auto-alojado como una nube o VPS, entonces usted podría estar utilizando un servidor web como Apache o Nginx. Si es así, entonces usted puede seguir lo mencionado anteriormente para implementar en el servidor web en lugar de WordPress. Sin embargo, si usted en alojamiento compartido o sin acceso a modificar los servidores web, entonces usted puede aprovechar un plugin.

Para implementar CSP en WordPress, puede utilizar el plugin Content Security Policy Pro.

Verificación

Una vez que haya terminado con la implementación, puede utilizar las herramientas para desarrolladores incorporadas en el navegador o una herramienta de comprobación de cabeceras seguras.

Conclusión

CSP es una de las cabeceras seguras más potentes para prevenir vulnerabilidades web. Espero que las instrucciones anteriores le guíen sobre cómo implementar frame-ancestors en Apache y Nginx.