none
Mostrar Texto Enriquecido en Asp.net RRS feed

  • Pregunta

  • Hola a todos,

    Copie una porción de texto de una pagina cualquiera en Internet, esta porción de texto tiene formato de letras en negrita y cursiva, saltos de linea, títulos, sub-titulos y un listado. Guarde esa porción de texto en una base de datos SQL cuya propiedad de la columna es: varchar(MAX). 

    Necesito mostrar esa porción de texto (con el mismo formato) en una pagina web. ¿Como puedo hacer eso?.

    Sé que no puedo mostrar esa porción de texto en un en un asp.label. ¿Tengo alguna opción usando algún LiteralControl?. ¿Es correcto la propiedad varchar(MAX) para guardar ese tipo de texto?

    Muchas gracias por sus ayudas!!

    sábado, 8 de abril de 2017 20:29

Respuestas

  • Pero ese texto que guardas, ¿cómo tiene codificadas las partes que tienen formato? ¿Está salvado con codificación HTML? Por ejemplo, así "Esto es un texto y <b>esto</b> está en negrita". Si fuera así, sería lo ideal, porque en ese caso no hay más que trasladarlo directamente a la página de manera literal, exactamente como se salvó (por ejemplo con <%=variable%>), y se muestra con todos sus atributos.

    En cambio, si se salvó con otra codificación tal como rtf (lo digo porque lo has llamado "texto enriquecido"), entonces es mucho más complicado, porque tendrías que escribir código que analice el rtf y lo convierta a html.

    En cualquiera de los dos casos, se puede salvar perfectamente en un varchar(max), siempre que tengas cuidado de que el código que graba y lee respete exactamente la codificación salvada y no te altere los caracteres tales como los símbolos "<".

    Ojo con los ataques de inyección de script. Si el texto siempre lo salvas tú mismo y tienes cuidado con lo que salvas, no hay problema, pero si permites que los usuarios salven html y luego se lo presentas a otros usuarios distintos, esta es una forma en la que los hackers pueden atacar a esos equipos.

    • Propuesto como respuesta Brayan De La Cruz domingo, 9 de abril de 2017 4:17
    • Marcado como respuesta RicardoMP domingo, 9 de abril de 2017 21:38
    sábado, 8 de abril de 2017 21:28
  • Hola RicardoMP,

    A lo que se refiero Alberto es a que como el usuario tendrá la posibilidad de grabar scripts, podrían atacar a tu sistema o tu base de datos mediante ese código, ya que digamos que le darás la posibilidad al de que haga como una codificación o programación en tu pantalla.

    dale un ojo a esto: Evita los ataques de inyección de SQL

    Saludos.


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    • Marcado como respuesta RicardoMP domingo, 9 de abril de 2017 21:39
    domingo, 9 de abril de 2017 4:20
  • Sin embargo, me queda la duda por lo que me dijiste de insertar script, en el futuro quiero que otros ingresen el texto en formato html, usando algo como FreeTextBox

    Concretamente el tipo de ataques al que me refería es el que ocurre cuando el usuario que salva el Html mete algo como esto: "Hola, mundo.<script>alert('Jaja');</script>". Si eso luego se lo envías a la página que se le presenta a otro usuario, se ejecuta el script y le sale el "alert" en pantalla. Evidentemente, este ejemplo es inocuo, y ese alert no supone ningún peligro, pero metiendo un script cuidadosamente escrito se puede "trucar" la página y modificarla en cualquier forma que el atacante desee.

    Para evitar estos ataques, hay que "filtrar" el html que el usuario intenta salvar, y suprimir cualquier cosa que pueda resultar peligrosa, principalmente los tags de <script>. Busca "anti-xss" y verás que hay varias librerías que ofrecen este tipo de filtrado.


    Editado: No tiene nada que ver con los ataques de inyección de SQL que mencionaba Brayan. Esos ataques también son "malos", pero no guardan relación con el hecho de que permitas salvar HTML, podrían ocurrir igualmente sobre cualquier otro dato que no admita HTML.
    domingo, 9 de abril de 2017 7:31

Todas las respuestas

  • Pero ese texto que guardas, ¿cómo tiene codificadas las partes que tienen formato? ¿Está salvado con codificación HTML? Por ejemplo, así "Esto es un texto y <b>esto</b> está en negrita". Si fuera así, sería lo ideal, porque en ese caso no hay más que trasladarlo directamente a la página de manera literal, exactamente como se salvó (por ejemplo con <%=variable%>), y se muestra con todos sus atributos.

    En cambio, si se salvó con otra codificación tal como rtf (lo digo porque lo has llamado "texto enriquecido"), entonces es mucho más complicado, porque tendrías que escribir código que analice el rtf y lo convierta a html.

    En cualquiera de los dos casos, se puede salvar perfectamente en un varchar(max), siempre que tengas cuidado de que el código que graba y lee respete exactamente la codificación salvada y no te altere los caracteres tales como los símbolos "<".

    Ojo con los ataques de inyección de script. Si el texto siempre lo salvas tú mismo y tienes cuidado con lo que salvas, no hay problema, pero si permites que los usuarios salven html y luego se lo presentas a otros usuarios distintos, esta es una forma en la que los hackers pueden atacar a esos equipos.

    • Propuesto como respuesta Brayan De La Cruz domingo, 9 de abril de 2017 4:17
    • Marcado como respuesta RicardoMP domingo, 9 de abril de 2017 21:38
    sábado, 8 de abril de 2017 21:28
  • Gracias Alberto por la respuesta.

    El texto en un principio lo guardare yo, después el cliente podrá guardar sus propios textos. El texto lo guardo en RTF, sin embargo, tal como tu dices es mejor guardarlo en codificación html. Por lo que gracias a ti se me ocurrió usar un convertidor online de texto a html. Con eso pude solucionar el problema.

    Sin embargo, me queda la duda por lo que me dijiste de insertar script, en el futuro quiero que otros ingresen el texto en formato html, usando algo como FreeTextBox. ¿Es posible solucionar ese problemita de alguna forma?.

    Gracias!.

    domingo, 9 de abril de 2017 2:20
  • Hola RicardoMP,

    A lo que se refiero Alberto es a que como el usuario tendrá la posibilidad de grabar scripts, podrían atacar a tu sistema o tu base de datos mediante ese código, ya que digamos que le darás la posibilidad al de que haga como una codificación o programación en tu pantalla.

    dale un ojo a esto: Evita los ataques de inyección de SQL

    Saludos.


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    • Marcado como respuesta RicardoMP domingo, 9 de abril de 2017 21:39
    domingo, 9 de abril de 2017 4:20
  • Sin embargo, me queda la duda por lo que me dijiste de insertar script, en el futuro quiero que otros ingresen el texto en formato html, usando algo como FreeTextBox

    Concretamente el tipo de ataques al que me refería es el que ocurre cuando el usuario que salva el Html mete algo como esto: "Hola, mundo.<script>alert('Jaja');</script>". Si eso luego se lo envías a la página que se le presenta a otro usuario, se ejecuta el script y le sale el "alert" en pantalla. Evidentemente, este ejemplo es inocuo, y ese alert no supone ningún peligro, pero metiendo un script cuidadosamente escrito se puede "trucar" la página y modificarla en cualquier forma que el atacante desee.

    Para evitar estos ataques, hay que "filtrar" el html que el usuario intenta salvar, y suprimir cualquier cosa que pueda resultar peligrosa, principalmente los tags de <script>. Busca "anti-xss" y verás que hay varias librerías que ofrecen este tipo de filtrado.


    Editado: No tiene nada que ver con los ataques de inyección de SQL que mencionaba Brayan. Esos ataques también son "malos", pero no guardan relación con el hecho de que permitas salvar HTML, podrían ocurrir igualmente sobre cualquier otro dato que no admita HTML.
    domingo, 9 de abril de 2017 7:31
  • Gracias por las respuestas, he quedado bastante claro con el tema.
    domingo, 9 de abril de 2017 21:38