Pregunta

Si tengo un usuario introducir datos en un editor de texto enriquecido (pequeño editor) y la presentación de los datos que estoy almacenar en una base de datos y recuperar para mostrar en otras páginas web dinámicas, ¿por qué necesito codificar aquí.

Es la única razón porque alguien podría pegar JavaScript en el editor de texto enriquecido? ¿hay alguna otra razón?

¿Fue útil?

Solución

Seguridad es la razón.

La razón más obvia / común es Cross-Site-Scripting (XSS). Que resulta ser la causa fundamental de los problemas de seguridad podrá ser testigo en su sitio.

Cross-site scripting (XSS) es un tipo vulnerabilidad de la seguridad informática se encuentran típicamente en aplicaciones web que permite a atacantes maliciosos a script del lado del cliente inyectar en Web páginas visitadas por otros usuarios. Un explotado script de páginas vulnerabilidad puede ser utilizado por los atacantes para el acceso de derivación controles tales como la política del mismo origen. Cross-site scripting llevado a cabo en los sitios web eran aproximadamente el 80% de toda la seguridad vulnerabilidades documentadas por Symantec a partir de 2007. 1 Su impacto puede variar desde una pequeña molestia a una significativa riesgo para la seguridad, en función de la sensibilidad de los datos manejados por el sitio vulnerable, y la naturaleza de cualquier reducción de seguridad implementado por propietario del sitio.

adicional, como se muestra a continuación en los comentarios, el diseño de su sitio también puede ser atornillado hacia arriba.

Es necesario Microsoft Anti-XSS Biblioteca

Más recursos

http://forums.asp.net/t/1223756.aspx

Otros consejos

Estás haciendo algunos errores.

Si lo acepta en texto con formato HTML desde el editor de texto enriquecido, que no pueden Html.Encode llamada o se codificará todas las etiquetas HTML, y verá marcado prima en lugar de formatos de texto.

Sin embargo, todavía se necesita para proteger contra XSS.

En otras palabras, si el usuario introduce el código HTML siguiente:

<b>Hello!</b>
<script>alert('XSS!');</script>

Usted quiere mantener la etiqueta <b>, pero gota (no codifica) la etiqueta <script>.
Del mismo modo, es necesario soltar los atributos de eventos en línea (como onmouseover) y Javascript URL (como <a href="javascript:alert('XSS!');>Dancing Bunnies!</a>)

Se debe ejecutar HTML del usuario a través de una estricta analizador XML y mantener una estricta lista blanca de etiquetas y atributos al guardar el contenido.

Creo que estás confundiendo "codificar" con "lavado".

Si desea aceptar texto de un usuario, es necesario codificar como HTML antes de render como HTML. De esta manera, el texto

a < b

es codificada en HTML como

a &lt; b

y se hace en un navegador HTML (del mismo modo que el usuario entró en ella) como:

a < b

Si desea aceptar HTML de un usuario (que suena como lo hace en este caso), que ya está en formato HTML, por lo que no desea llamar HTML.Encode nuevo. Sin embargo, es posible que desee fregar para quitar cierta marcado que usted no permite (como bloques de script).

La seguridad es la razón principal.

No sólo podría un usuario introduzca el código Javascript o alguna otra malicia, es necesario utilizar HTML codificación con el fin de mostrar determinados caracteres en la página. Usted no quiere que su página se rompa debido a que su base de datos contenía: "Nice Página: ->".

Además, si usted está introduciendo el código en una base de datos, asegúrese de "sanatize" las entradas a la base de datos.

Sí, es para evitar que JavaScript se ejecute si alguien fuera a cadena maliciosa de entrada en el editor de texto enriquecido. Sin embargo, texto plano JavaScript no su única preocupación, por ejemplo, este es un XSS:

<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>

Echa un vistazo aquí para una serie de diferentes opciones XSS; http://ha.ckers.org/xss.html

Como una funcionalidad nueva a un lado ..... MVC2 ha puesto en marcha por lo que ya no hay necesidad de llamar a HTML.Encode

si cambia de la sintaxis vista desde

a

MVC codificará automáticamente. Hace cosa mucho más fácil / más rápido. Una vez más, MVC2 solamente

Otra razón es que algunas entradas del usuario lata algunas etiquetas de cierre </div></table> y potencialmente romper el diseño de su sitio web. Si está utilizando una herramienta de edición de HTML Asegúrese de que el HTML producido es válida antes de clavarse en la página sin codificar. Se requiere algún análisis del lado del servidor con el fin de hacer esto. Puede usar HtmlAgilityPack para hacer esto.

La principal razón para hacer lo que sugiere que su es escapar de su salida. Puesto que usted está aceptando HTML y desea dar salida que no se puede hacer eso. Lo que hay que hacer es filtran cosa que de usuario pueden hacer que son inseguros, o al menos no lo desea.

Por eso, permítanme sugerir AntiSamy .

Puede demostración de que aquí .

Lo que está haciendo tiene una gran cantidad de riesgos heredar y se debe considerar con mucho cuidado.

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