function search(path){ var xhr = new XMLHttpRequest();xhr.onreadystatechange=function(){if(this.readyState==4&&this.status==200){eval('var searchResultsObj = '+this.responseText);displaySearchResults(searchResultsObj);}};xhr.open("GET", path +window.location.search);xhr.send();}
La función search realiza una solicitud GET a la URL compuesta por path y los parámetros de la búsqueda (window.location.search).
Cuando la respuesta se recibe y es exitosa (status == 200), el código evalúa la respuesta JSON como un objeto JavaScript usando eval.
Mostrar los resultados de la búsqueda:
displaySearchResults se encarga de actualizar el DOM con los resultados de la búsqueda.
Entrada Maliciosa: \
Entrada Maliciosa: \"-alert(1)}//
Si un usuario malicioso ingresa la cadena \"-alert(1)}//, el código puede quedar vulnerable a un ataque XSS debido al uso de eval. Vamos a analizar por qué:
Concatenación y Evaluación de la Respuesta:
Si el servidor devuelve una respuesta JSON que incluye la cadena maliciosa sin escaparla adecuadamente, eval ejecutará código JavaScript no seguro.
Ejemplo de Respuesta del Servidor: Supongamos que el servidor devuelve el siguiente JSON (simplificado):
Evaluación Peligrosa:
La línea eval('var searchResultsObj = ' + this.responseText); se convertiría en:
Debido a los caracteres de escape, la cadena de búsqueda se cierra prematuramente y se ejecuta alert(1).