Prevenga Cross-Site Scripting (XSS) en Spring Boot con políticas de seguridad de contenido (CSP)

Prevenga Cross-Site Scripting (XSS) en Spring Boot con políticas de seguridad de contenido (CSP)

 

Introducción

La seguridad de los usuarios y sus datos personales al utilizar una aplicación web es primordial. Aunque este principio rector ha sido reconocido desde las primeras etapas del desarrollo web, los actores maliciosos encuentran fallas en las aplicaciones y pueden explotar a sus usuarios.

Muchos ataques "estándar" son bien conocidos y están documentados, y protegerse contra ellos no es difícil. Para evitar que el desarrollador implemente prácticas de seguridad, los marcos como Spring Boot han abstraído varias medidas de seguridad y le permiten simplemente aplicar filtros de seguridad en sus aplicaciones para evitar ataques conocidos.

En esta breve guía, veremos qué es Cross-Site Scripting (XSS), cómo alguien podría realizar este ataque en su propia aplicación y cómo puede prevenirlo fácilmente con Spring Boot.

¿Qué es Cross-Site Scripting (XSS)?

Cross-Site Scripting es un exploit bien conocido y generalizado, en el que un mal actor inyecta un script en una aplicación web.

Por lo general, se aplica una política del mismo origen a las aplicaciones web, que restringe el acceso de los scripts en una página web a los datos de las fuentes si sus orígenes no coinciden. Bajo la política del mismo origen - si una página de un sitio web de confianza puede acceder a datos de la interfaz de usuario (como cookies, por ejemplo), otras páginas del mismo origen también pueden hacerlo. Esta forma de control de acceso parecía suficiente para proteger la integridad de los datos en las aplicaciones web en ese momento.

Cross-Site Scripting omite la política del mismo origen, inyectando un script malicioso en la página de un sitio web de confianza. Dado que el script se ejecuta desde un sitio web de confianza, se ejecuta como un script de confianza. No había una forma clara de diferenciar los scripts maliciosos de los no maliciosos. Por lo tanto, la ejecución de código arbitrario fue posible con Cross-Site Scripting. Estos van desde la inserción de alertas molestas hasta ataques de ingeniería social, la recopilación silenciosa de información del usuario o la redirección de los usuarios a páginas de phishing que parecen ser parte de sitios web confiables.

Varios Los sitios web son susceptibles a los ataques Cross-Site Scripting, y sigue siendo un ataque común en la actualidad, aunque este tipo de exploit se conoce desde los años 90.

Evite XSS en una aplicación Spring Boot con Política de seguridad de contenido (CSP)

Spring Boot se toma la seguridad en serio, y Spring Security Module implementa prácticas de seguridad flexibles y poderosas que permiten a los desarrolladores minimizar sus preocupaciones de seguridad, lo que a menudo requiere una comprensión de bajo nivel de los principios de cómo se intercambian los mensajes en un sitio web. solicitud.

De forma predeterminada, Spring Boot implementa varios encabezados de seguridad:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

¡La protección X-XSS está incluida por defecto! Este encabezado de seguridad intenta detectar XSS los intenta y los bloquea. Sin embargo, este no es un proceso infalible y los navegadores tienen diferentes implementaciones de detectores. Algunos navegadores, como Chrome, incluso tienen eliminó su oyente XSS. Además, la detección automática funciona para Ataques XSS reflectantesmientras que también existen otros tipos de ataques.

Una alternativa más moderna a X-XSS-Protection es la Política de seguridad de contenido (CSP), que se ocupan principalmente de políticas sobre qué recursos se pueden cargar, desde qué orígenes y en qué puntos finales. A partir de 2022, CSP es la mejor medida preventiva contra XSS, Clickjacking y otros tipos de ataques. No todos los navegadores implementan CSP, por lo que no se incluye en los encabezados de seguridad de forma predeterminada.

Notar: Incluso con CSP implementado, sigue siendo el mejor curso de acción para validar no importa cual la entrada del usuario y asegúrese de que se pueda procesar de forma segura utilizando su sistema, para evitar la inyección de código.

En Spring Boot, para configurar medidas de seguridad web personalizadas, normalmente se amplía el WebSecurityConfigurerAdapter clase, y reemplace el configure() método:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("csp-directives");
    }
}

Cuando las Directrices de la política de seguridad del contenido (proporcionadas como ;-cadena separada) depende de su caso de uso y las fuentes en las que desea confiar:

Content-Security Policy: directive1; directive2; directive3; ... directiveN;

Por ejemplo, una aplicación web puede enumerar sitios web confiables desde los cuales se pueden cargar scripts con:

script-src https://trusted.com;

O puede evitar confiar en un sitio web de terceros:

script-src self;

De manera similar, una aplicación puede confiar en los complementos:

object-src https://trusted.com

Hay una amplia variedad de directivas que puede proporcionar, que incluyen:

  • default-src - Reserva predeterminada
  • child-src - Fuentes de trabajo web válidas
  • frame-src - Fuentes válidas para <frame>la arena <iframe>s
  • img-src - Fuentes válidas para imágenes.
  • media-src - Fuentes válidas para <audio>, <video> y <track> Palabras clave
  • script-src - Fuentes de secuencias de comandos válidas (ayuda a prevenir XSS)
  • style-src - Fuentes válidas para <style> elementos
  • base-uri - Limita los recursos accesibles desde el <base> elemento
  • frame-ancestors - Padres válidos de <frame> <iframe>, <embed>, <applet>etc. elementos
  • etc.

Consulte nuestra guía útil y práctica para aprender Git, con las mejores prácticas, los estándares aceptados por la industria y la hoja de trucos incluida. Deja de buscar en Google los comandos de Git y, de hecho, aprender ¡este!

Por ejemplo, aquí hay un conjunto seguro de directivas de políticas:

script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:;
object-src 'none';
base-uri 'none';
require-trusted-types-for 'script';
report-uri https://csp.example.com;

Vamos a agregarlos a nuestra aplicación Spring Boot:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:; object-src 'none'; base-uri 'none'; require-trusted-types-for 'script'; report-uri https://csp.example.com;");
    }
}

Puede usar el CSP-Evaluator para evaluar si sus pautas de CSP son válidas y seguro, e indicará qué directivas son fácilmente procesables. Aquí hay una directiva CSP que permite las API de Google:

default-src 'self';
object-src 'none';
frame-src 'self' data:; 
script-src 'self' 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' https://storage.googleapis.com; 
style-src 'self' 'unsafe-inline'; 
img-src 'self' data:; 
font-src 'self' data:;
base-uri 'self'

Conclusión

En esta breve guía, analizamos qué es Cross-Site Scripting (XSS) y cómo funciona en un nivel holístico. A continuación, exploramos algunas medidas de prevención de XSS que se pueden implementar fácilmente con Spring Boot para proteger sus aplicaciones y establecer un Política de seguridad de contenido (CSP).

Finalmente, exploramos las pautas de CSP y analizamos algunas políticas de seguridad diferentes.

Si quieres conocer otros artículos parecidos a Prevenga Cross-Site Scripting (XSS) en Spring Boot con políticas de seguridad de contenido (CSP) puedes visitar la categoría Código.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Esta página web utiliza cookies para analizar de forma anónima y estadística el uso que haces de la web, mejorar los contenidos y tu experiencia de navegación. Para más información accede a la Política de Cookies . Ver mas