2011-12-12 15 views
6

He estado leyendo que codifica HTML en el camino de regreso del servidor al cliente (¿no?) Y esto evitará muchos tipos de ataques XSS. Sin embargo, no entiendo en absoluto. El HTML todavía será consumido y procesado por el navegador, ¿verdad?¿Por qué la codificación HTML previene ciertos ataques XSS?

¿Cómo se detiene esto?

He leído sobre esto en varias ubicaciones, sitios web y libros, y en ninguna parte explica realmente por qué esto funciona.

+1

No estoy seguro de por qué alguien desestimó esta pregunta. Me parece lo suficientemente razonable.Además, es importante tener una buena comprensión de cómo funcionan las vulnerabilidades web para que puedan evitarse. – zzzzBov

Respuesta

10

Piénselo: ¿cómo se ve codificado HTML? Por ejemplo, podría tener este aspecto:

<a href="www.stackoverflow.com"> 

Por lo que se representará en el cliente como los literales (como < a href = "www.stackoverflow.com" >), no como HTML. Lo que significa que no verá un enlace real, sino el código en sí.

Los ataques XSS funcionan sobre la base de que alguien puede hacer que un navegador cliente analice HTML que el proveedor del sitio no tenía la intención de estar allí; si lo anterior no estuviera codificado, significaría que el enlace provisto estaría incrustado en el sitio, aunque el proveedor del sitio no quería eso.

XSS es por supuesto un poco más complicado que eso, y por lo general implica JavaScript así (de ahí el Cross Site Scripting ), pero para fines de demostración debería ser suficiente este ejemplo sencillo; Es lo mismo con el código JavaScript que con las etiquetas HTML simples, ya que XSS es un caso especial de la inyección HTML más general.

+1

OH! Esto tiene sentido ahora. Por lo tanto, el navegador * no * lo renderizará como HTML. Estaba en el contexto de ASP.NET MVC y de cómo usa la codificación HTML, y pensaba que lo estaba usando para el HTML real que pretendía mostrar. Ahora entiendo que solo lo estaba usando en referencia a los valores. – BigOmega

1

La codificación HTML convierte <div> en &lt;div&gt;, lo que significa que cualquier marcado HTML se mostrará en la página como texto, en lugar de ejecutarse como marcado HTML.

Las entidades básicas que son convertidos son:

  • & a &amp;
  • <-&lt;
  • >-&gt;
  • " a &quot;

OWASP recommends encoding some additional characters:

  • ' a &#x27;
  • / a &#x2F;

Estas codificaciones son la forma de representarse textualmente caracteres que de otro modo se consumen como marcado. Si quisiera escribir a<b, debe tener cuidado de que <b no se trate como un elemento HTML. Si usa a&lt;b, el texto que se mostrará al usuario será a<b.

Cuestiones relacionadas