Buenas prácticas de seguridad en JavaScript: manejo de texto y validación

Clase 5 de 13Curso de Next.js: Seguridad Web con OWASP

Resumen

¿Cómo prevenir vulnerabilidades al procesar texto de usuarios?

En el mundo del desarrollo web, la seguridad es fundamental, y una de las prácticas que más cuidado requieren es el procesamiento de datos de los usuarios. Es crucial garantizar que el texto recibido se maneje de manera segura para evitar la ejecución de código malicioso. La estrategia ideal es utilizar ese texto exclusivamente con fines de presentación: mostrarlo como un avatar, un apellido, etc., y emplear métodos de JavaScript destinados exclusivamente al procesamiento de texto.

¿Es seguro utilizar intérpretes en nuestro código?

Aunque en la teoría lo ideal es evitar la ejecución de texto a través de intérpretes, en la práctica muchas veces es necesario procesar dicho texto. Para asegurar nuestro sitio, debemos:

  1. Validar el texto: Asegurarnos de que cumple con todos los criterios necesarios antes de utilizarlo.
  2. Sanear el texto: Eliminar o transformar partes del texto que puedan ser peligrosas.

Reducir la dependencia de operaciones que requieren procesamiento de texto con un intérprete aumenta la seguridad de las aplicaciones web.

¿Qué métodos de JavaScript son más peligrosos?

Existen varios métodos en JavaScript que son potencialmente peligrosos al trabajar con cadenas de texto. Algunos de ellos son:

  • eval(): Ejecuta código JavaScript representado como una cadena de texto. Aunque algunas bibliotecas lo usan internamente, su uso directo es desaconsejado debido a sus riesgos inherentes.

  • document.write(): Aunque fue popular en el pasado, actualmente está siendo descontinuado y presenta problemas de seguridad.

  • innerHTML y outerHTML: Ofrecen la capacidad de insertar HTML en el DOM, lo cual es extremadamente peligroso ya que puede facilitar ataques XSS (Cross-site Scripting).

En casos donde leer datos es necesario, innerText resulta ser una opción más segura siempre que los datos se hayan validado y saneado previamente.

¿Cómo manipular de manera segura el contenido en JavaScript?

Para la manipulación segura de texto, considera usar:

  • textContent: Permite leer y escribir texto de manera segura, asegurando que el JavaScript o HTML malicioso incrustado en el contenido sea tratado como texto plano y no como código ejecutable.

¿Qué precauciones tomar al recibir datos de usuarios?

La recepción de datos del usuario no se limita a formularios. Otros puntos de entrada incluyen:

  • URLs y parámetros de búsqueda: Elementos como location.hash.split() pueden exponer aplicaciones a riesgos si los resultados no se manejan con cuidado.

Cuando se trabaja con tecnologías y frameworks como React o Next.js, es necesario cuestionar cómo se manejan estos datos en puntos específicos como el router. Por ejemplo, en Next.js se utiliza el query del router, pero aunque esto proporciona cierta seguridad, no elimina el riesgo por completo. Validar y sanear estos datos sigue siendo crucial.

Con esta base sólida, puedes proteger tus aplicaciones de vulnerabilidades comunes. Continúa explorando y aprendiendo prácticas seguras para seguir creciendo como desarrollador web.