No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Inyección de Ataques XSS y Prevención con Sanitized HTML

4/13
Recursos

¿Cómo se puede inyectar un ataque XSS en una aplicación Next.js?

La seguridad en el desarrollo web es esencial para proteger tanto a los usuarios como a las aplicaciones. Uno de los ataques más comunes es el Cross-Site Scripting (XSS), que puede inyectar scripts malintencionados en páginas web. En este artículo, exploraremos cómo identificar una vulnerabilidad XSS en una aplicación Next.js, usando un proyecto llamado Plantpedia como ejemplo.

¿Qué es Plantpedia y cómo prepararse para el experimento?

Plantpedia es un proyecto implementado para practicar habilidades en el desarrollo de sitios estáticos con Next.js. Si aún no tienes este proyecto, te sugiero seguir estos pasos para prepararte:

  • Clonar el proyecto desde GitHub.
  • Crear una cuenta en Contentful y cargar las entradas requeridas desde la terminal.
  • Instalar las dependencias necesarias y levantar el servidor de desarrollo.

¿Cómo opera la vulnerabilidad XSS en El Muro?

El sitio web denominado "El Muro" permite a los usuarios autenticarse y compartir mensajes. Sin embargo, un análisis más detallado revela que existe una vulnerabilidad potencial de XSS. Cuando se ingresa texto en el campo de entrada, este texto se procesa y se muestra utilizando dangerouslySetInnerHTML de React. Aunque útil para incluir HTML directamente, este enfoque, si no se maneja adecuadamente, puede ser la fuente de un ataque XSS.

¿Qué implica el saneamiento de datos?

El saneamiento de datos es el proceso de limpiar o modificar los datos de entrada para evitar la ejecución de código no deseado. En el contexto de un ataque XSS, esto se logra manipulando el texto de entrada y eliminando cualquier script o etiqueta HTML peligrosa antes de mostrarlo.

Para mitigar esta clase de ataques, se recomienda el uso de la biblioteca sanitize-html, la cual ayuda a eliminar las amenazas potenciales de XSS mediante la "limpieza" del HTML entrante.

Implementación de medidas de seguridad con Sanitize-HTML

¿Cómo instalar y configurar sanitize-html?

Para abordar correctamente las vulnerabilidades XSS, podemos integrar la biblioteca sanitize-html en nuestro proyecto. Sigue estos pasos para instalar y usarla:

  1. Instalación: Abre tu terminal e instala la biblioteca junto con sus tipos para TypeScript.

    yarn add sanitize-html
    yarn add @types/sanitize-html
    
  2. Configuración y uso: A continuación, debes incorporar el saneamiento en el ámbito adecuado dentro de tu aplicación.

    import sanitizeHtml from 'sanitize-html';
    
    const safeHtml = sanitizeHtml(userInput, {
      allowedTags: ['strong', 'a', 'em', 'b'],
      allowedAttributes: {
        'a': ['href'],
      }
    });
    
  3. Integración en el componente: Puedes aplicar esto directamente en el componente editor que maneja las entradas de usuario para asegurar el procesamiento seguro del texto:

    const handleSubmit = (input: string) => {
      const cleanHtml = sanitizeHtml(input);
      // Subsecuente manejo del dato seguro
    };
    

¿Cómo protege sanitize-html frente a XSS?

La configuración anterior asegura que solo se permitan etiquetas HTML específicas y elementos seguros, eliminando potenciales scripts de inyección antes de presentar cualquier contenido. Es crucial para mantener la seguridad de la aplicación web, protegiendo tanto la integridad del sistema como la experiencia del usuario.

Recomendación: Prácticas seguras al manejar datos de entrada

Es vital adoptar el saneamiento de datos en cualquier aplicación web que interprete HTML o JavaScript del lado del cliente. Aquí algunas recomendaciones adicionales:

  • Server-Side Rendering (SSR): Si usas SSR con Next.js, asegúrate de que tus datos estén igualmente saneados antes de ser enviados al cliente.

  • Actualizaciones regulares: Mantén tu biblioteca sanitize-html actualizada para beneficiarte de las últimas mejoras y soluciones de seguridad.

  • Revisión de código: Audita regularmente tu código para identificar y solucionar vulnerabilidades potenciales.

Con un enfoque proactivo hacia la seguridad, como el uso adecuado de sanitize-html, estarás mejor preparado para prevenir ataques XSS en tu aplicación. ¡Sigue aprendiendo y mejorando tus habilidades de desarrollo, y no olvides siempre priorizar la seguridad en el diseño de software!

Aportes 14

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

<strong>Hello</strong> World

<span onclick=“alert(‘La mejor educación’)” >Holiwis</span>

Commit de la clase, incluye la configuracion de los tags que no se mostraron en la clase.

Commit - https://github.com/NightDreams/platzi-plantpedia/commit/e5e019111bbdfc64ee14de3d6597d5f26c0a099f

Mi comentario no es malicioso jeje

Este te⁢⁢‌‌‍︀⁤︁‌‍⁡‌⁢⁤⁤⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁤‍⁠‌⁤⁢xto pesa más de lo normal :p

porque no todos usamos react para paginas web te agredeciarmos mucho
podrias decirme como se agregar en javascript normal
\<h6>Holaa \ , el agua es vida \ \</h6>
\

hola\

Hola mi \codigo\ no es malicioso

sanitize-html Para sanitizar los elementos html y que no les inyecten código.

Mi hola en <strong>negrita</strong>

<strong onclick="window.alert('👨‍💻👨‍💻👨‍💻')">Holi</strong>El código no es malicioso.
<strong>Hello</strong> World