Desinfectar HTML antes de almacenar en la base de datos o antes de renderizar? (Biblioteca AntiXSS en ASP.NET)

StackOverflow https://stackoverflow.com/questions/2060923

Pregunta

Tengo un editor que permite a los usuarios añadir HTML que se almacena en la base de datos y se hace en una página web. Dado que esta es la entrada no es de confianza, voy a utilizar Microsoft.Security.Application.AntiXsSS.GetSafeHtmlFragment para desinfectar el código HTML.

  • ¿Debo santiize antes de guardarlo en la base de datos o antes de representar la entrada que no se confía en la página web?
  • ¿Hay una ventaja en incluyendo el código fuente AntiXSS en mi proyecto en lugar de sólo la DLL? (Tal vez pueda personalizar la lista blanca?)
  • ¿Qué archivo de clase I debe mirar para buscar la aplicación real de la GetSafeHtmlFragment
¿Fue útil?

Solución

No estoy de acuerdo con la respuesta seleccionada por dos razones

  1. Si almacenó los datos codificados, usted tiene que escoger un codificador antes de almacenar. ¿Qué ocurre si ha almacenado algo como HTML pero también quieren empujarlo fuera en otro formato, por ejemplo, como una respuesta JSON, o como parte de un documento XML? Ahora tiene un formato codificado un código HTML que debe decodificar, a continuación, codificar en el formato correcto.
  2. ¿Qué pasa si descubrimos un error de los codificadores y empujar a cabo una nueva versión? Ahora, porque no estás codificación en el punto de salida de todos los datos antiguos pueden contener cosas que han sido codificados de forma incorrecta. Puede codificar de nuevo, pero entonces golpear números dobles de codificación que puede ser doloroso para filtrar correctamente.

En general se codifica en el punto de salida y tratar los datos procedentes de un almacén de datos que no son de confianza por defecto - después de todo, ¿qué pasaría si alguien logra editar su base de datos directamente o por medio de la inyección de SQL

Otros consejos

Tener un escuchar el podcast de OWASP 67 con Jeff Williams el XSS . Él no habla de desinfección o la codificación antes de su almacenamiento. La razón principal es que si (cuando) las bibliotecas evolucionan en respuesta a las nuevas vulnerabilidades sus datos va a ser atrapado de nuevo en la versión antigua. Por supuesto, esto no impide la ejecución de cualquier entrada en contra de una lista blanca en el punto de entrada y el rechazo de cualquier cosa fuera del intervalo aceptable.

  • Tanto
  • Sólo si piensa cambiar, lo que yo no haría personalmente
  • La clase AntiXSS (ya que es llamado como AntiXss.GetSafeHtmlFragment())

Puede usar la directiva de página en el parámetro ValidateRequest = "true" . De esta manera, todos los datos de solicitud se valida y si hay un problema de validación siempre se puede detectar el error. También evita que los hilos de inyección SQL y otros no sólo es posible XSS.

Con los datos numéricos, puede validar desbordamiento de enteros o mal uso de tipos de datos con Int32.TryParse () o cualquier otro de la familia TryParse (Byte.TryParse Int16.TryParse ...)

No es necesario utilizar cualquier otra clase o método desinfectante adicional.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top