Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

253
Views
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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!