Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

255
Vistas
JSON.parse reviver para desinfectar datos (detener XSS)

Estoy tratando de reducir las vulnerabilidades en una base de código antigua, específicamente los ataques XSS. El patrón general es:

  • El sitio es una colección de páginas HTML con etiquetas.
  • Utiliza jQuery
  • Cada página ejecuta sus propios scripts.
  • Los scripts de cada página realizan una solicitud $.ajax a un archivo PHP que devuelve text/plain JSON sin formato (a través json_encode($data) )
  • Estos datos luego se usan para crear un marcado HTML dinámico para inyectar en el DOM a través de $(selector).html , $(selector).append , u ocasionalmente document.getElementById(id).innerHTML =

Aquí hay un ejemplo simplificado del flujo de datos: page.html

 <head> <script src="script.js"></script> </head> <body> <table id="myTable"></table> </body>

guión.js

 $.ajax({url: "phpFile.php"}, function(data){ data = JSON.parse(data); $("#myTable tbody").html(data.redcuce(row=>"<tr><td>"+row.text"+</td></tr>", "")) }

phpArchivo.php

 //database query resulting in $data = [text->'<img src="x" onerror="alert(1)">', text->'Innocent value'] echo json_encode($data);

Algunos de los datos recuperados son entradas del usuario, por lo que si un campo contiene <img src="x" onerror="alert(1)"> , se ejecuta cuando se representa en la tabla.

¿Solución?

Pasé la siguiente función de desinfección a JSON.parse para desinfectar los datos

 const sanitiseJson = (key, value) => typeof value === "string" ? DOMPurify.sanitize(value, { USE_PROFILES: { html: true } }) : value;

Esto usa la biblioteca DOMPurify , que sería muy fácil de implementar para mí con buscar y reemplazar.

Según tengo entendido, esto eliminará HTML potencialmente malicioso del objeto JSON. Esto evitará ataques XSS en este escenario.

  1. ¿Es esto suficiente para desinfectar los datos obtenidos que luego se insertan en el DOM?
  2. ¿Cuáles son las otras vulnerabilidades de XSS que no se abordan en esto?

Editar: tenga en cuenta que soy muy consciente de que .html() etc., no es la forma correcta de insertar datos, pero esta es una base de código grande y antigua (más de 45k líneas) y está muy arraigada, por lo que mi pregunta es más sobre si esto es una solución 'aceptable' en un apuro o si no se acerca

Según mis pruebas limitadas, parece funcionar, y como entiendo (poco) la forma en que se procesan los datos, no puedo ver cómo se eludiría fácilmente.

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda