𝗥𝗲𝗮𝗰𝘁 𝘃𝘀. 𝗫𝗦𝗦: 𝗗𝗼𝗻𝗱𝗲 𝘁𝗲𝗿𝗺𝗶𝗻𝗮𝗻 𝗹𝗮𝘀 𝗽𝗿𝗼𝘁𝗲𝗰𝗰𝗶𝗼𝗻𝗲𝘀
React es seguro por defecto. Escapa los valores en JSX para detener la mayoría de las inyecciones de scripts. Pero esto crea una falsa sensación de seguridad. React reduce el riesgo de XSS, pero no lo elimina.
Existen tres tipos principales de ataques XSS:
- XSS reflejado (Reflected XSS): Un atacante envía un enlace malicioso. El servidor devuelve el script al usuario de inmediato. El navegador ejecuta el script porque parece provenir de un sitio de confianza.
- XSS almacenado (Stored XSS): El atacante guarda un script en tu servidor. Este reside en tu base de datos, comentarios o registros. Cada usuario que visualiza ese contenido ejecuta el script.
- XSS basado en el DOM (DOM Based XSS): El ataque ocurre enteramente en el navegador. El atacante cambia los parámetros de la URL o las entradas del lado del cliente para que tu JavaScript se comporte de forma maliciosa.
¿De qué te protege React realmente?
- Escapado automático: React trata las cadenas como texto plano. Si intentas inyectar una etiqueta de script en JSX, React muestra el texto en lugar de ejecutar el código.
- Renderizado seguro: React gestiona cómo aparece el contenido. Esto reduce la necesidad de utilizar APIs peligrosas del navegador.
- Menos manipulación del DOM: React se encarga de las actualizaciones. No necesitas usar
document.write()oinnerHTMLtan a menudo.
React proporciona vías de escape. Si las usas de forma incorrecta, creas vulnerabilidades.
Ten cuidado con estos errores:
dangerouslySetInnerHTML: Esta propiedad le indica a React que se salte el escapado. Inserta el HTML exactamente como es. Si el contenido no está limpio, el atacante gana. Usa DOMPurify para sanitizar tu contenido primero.- Manipulación directa del DOM: Si usas
element.innerHTMLcon la entrada de un usuario, te saltas toda la seguridad de React. - Librerías de terceros: Algunas herramientas externas podrían no seguir las mismas reglas de seguridad.
React proporciona las herramientas para la seguridad. Debes usarlas correctamente. La seguridad es tu responsabilidad.
Fuente: https://dev.to/ayomidejhay/react-vs-xss-where-the-guardrails-end-6p2