2010-01-08 11 views
6

Con la intención de prevenir ataques XSS, estoy actualizando una página en la que tenemos un cuadro de texto que acepta HTML, lo almacena en una base de datos y lo recupera y procesa posteriormente.Uso de la biblioteca MS Anti XSS para desinfectar HTML

Según tengo entendido, puedo desinfectar el HTML utilizando el método AntiXSS.GetSafeHtmlFragment(). Mientras haga esto antes de almacenar el HTML en la base de datos, ¿estoy cubierto? ¿Debo hacer algo cuando el HTML se muestre en una página web?

Además, parece que la lista blanca es una especie de cuadro negro. ¿Hay alguna forma de actualizar esto en función de nuestros requisitos?

Respuesta

4

Debe configurarlo. Aunque obviamente esto no lo protegerá de nada que ya esté en la base de datos.

Puede usar AntiXSS.GetSafeHtmlFragment() mientras imprime la página en lugar de guardar. Pero hacer cuando se guarda es probablemente más seguro. Sin embargo, no querrás hacerlo mientras renderizas y guardas.

La lista blanca no es editable.

+0

Desafortunadamente, AntiXSS.GetSafeHtmlFragment() volvió a ser vulnerables en la versión más antigua e inútil en la versión nueva (tiras de TI casi todas las etiquetas HTML posibles). – BornToCode

1

Estás casi allí. Debe asegurarse de que you choose the proper encoding. Por ejemplo, si la entrada del usuario entró en una url, necesitaría usar AntiXSS.UrlEncode(), y si entraba en JavaScript, querría usar AntiXSS.JavaScriptEncode(). Si no puede garantizar cuándo guardará la entrada, cuál será el formato de salida, es mejor realizar la desinfección en el momento de la salida.

+0

... recordando desinfectar para inyección de SQL –

+0

Por lo tanto, si el usuario ingresa HTML que desinfecte usando GetSafeHtmlFragment, necesitaría buscar todas las URL (a href) y código JS y pasar a través de AntiXSS.UrlEncode y AntiXSS. JavaScriptEncode? – Nick

+0

Necesita escapar de la salida para el contexto en el que se va a utilizar. En general, las personas logran esto mediante el uso de un sistema de plantillas que realiza un autoespacio a medida que se generan, en lugar de verificar cada campo individualmente. Lea todo el artículo que he vinculado, debería ayudar: http://msdn.microsoft.com/en-us/library/aa973813.aspx – Annie

3

Con respecto a su pregunta sobre "caja negra": sí, es una caja negra, y tengo entendido que no puede editarla. Si busca más granularidad, consulte AntiSamy.NET project.

Cuestiones relacionadas