Tengo el siguiente problema, Client Potential XSS e intenté solucionarlo
$('#plazo input[value=' + $('#plazoActual').text() + ']').prop('checked', true);pero no entiendo por qué .text() es una vulnerabilidad
Espero que alguien con experiencia pueda ayudar, cómo desinfectar adecuadamente la línea anterior.
La vulnerabilidad no es $('#plazoActual').text() , sino el hecho de que toma ese valor de la página (probablemente editable por un usuario) y lo usa en $(). Se informa porque $() puede crear elementos y, si se crea a partir de una entrada de usuario concatenada, permite la inyección (xss).
Sin embargo, a primera vista, este caso en particular no parece vulnerable, porque $() arriba no crea un elemento, es solo un selector para un campo de entrada (el primer carácter es un # y hay un espacio). Creo que esto no se puede explotar en general, pero jQuery estuvo hace mucho tiempo con todo tipo de vulnerabilidades también dependiendo de la versión exacta. Además, la entrada puede manipularse potencialmente para que el selector encuentre algo más en la página, lo que podría ser útil en un ataque más complejo.
Una forma más robusta y segura sería encontrar todas las entradas en #plazo (algo así como $('#plazo input') ), iterar a través de ellas y checked donde el valor es $('#plazoActual').text() . Entonces, el punto es no tener contenido dinámico en el selector.