Tengo datos no guardados de los usuarios.¿Es seguro el método jQuery .text() XSS?
Por lo que es seguro de usar como esto:
var data = '<test>a&f"#</test>'; // example data from ajax response
if (typeof(data) === 'string')
$('body').text(data);
¿Puedo usar como esto o hay algunos problemas como la codificación o algunos símbolos específicos que deben tener cuidado y añadir una validación más estricta?
Aunque jQuery escapa de manera efectiva de los elementos HTML cuando se utiliza '.text (data)', se puede decir algo por no tener completamente oculto el código HTML definido por el usuario en su base de datos. No deberías tener que confiar en tu memoria para usar el HTML del lado del cliente que se escapa cada vez que usas esa variable de base de datos y tampoco nadie debería usar tu código. Así que yo diría, quite las etiquetas html de los datos antes de guardarlos en su base de datos. Realice algunas pruebas que garanticen que solo pueda guardar datos eliminados en html para campos definidos por el usuario. Realmente no veo el valor de escapar vs. pelar en este caso. –
Si el usuario quiere enviar html no quiero decirle lo siento hermano que no puede. Tal vez eso no es html, ¿cómo debería saber? ¿Qué pasa con el ahorro en la base de datos no desinfectada? ¿Por qué debería eliminar algunas partes o modificar los datos del usuario? Si lo hago, ¿cómo el usuario podrá obtener sus datos exactamente? – Vytautas
No se trata de negarse a almacenar datos peligrosos, se trata de hacer que los datos peligrosos sean seguros de almacenar y usar. No muchas personas intentarán usar HTML legítimamente y quienes lo hagan verán que su HTML se elimina lo suficientemente pronto. Pelar las etiquetas html alrededor del texto aún dejará el texto dentro de ellas. Realmente tiene que modificar los datos del usuario si esos datos pueden ser peligrosos para usted y los demás. No lo deje en su base de datos para ser utilizado accidentalmente. –