2011-09-25 19 views
5

Im usando jQuery Markitup para permitir a los usuarios introducir html ... Para que puedan materia de entrada como:¿Cómo escapar html?

<h1>Foo</h1> 
<p>Foobar</p> 

Sin embargo, yo estaba viendo http://railscasts.com/episodes/204-xss-protection-in-rails-3 y decidimos probar este pedazo de código en la entrada:

<script>alert('test');</script> 

Para mi asombro, cuando envié el formulario y actualicé la página, salió el cuadro de alerta. ¡Este es un riesgo de seguridad!

Esto es lo que tengo en mi opinión:

<div><%= comment.description.html_safe %></div> 

Lo anterior muestra cualquier html, sino que también es propenso a XSS. Así que probé:

<div><%= html_safe(comment.description).html_safe %></div> 

Pero lo anterior no representa ningún html. De hecho, muestra el html como , texto, que no es el comportamiento deseado.

Necesito renderizar el html y al mismo tiempo protegerme de xss. ¿Cómo hago esto?

Respuesta

0

Trate

<%= sanitize(comment.description) %> 

Actualización:

para quitar todas las etiquetas utilizan strip_tags

+0

Sí desinfectar representa HTML, y no ejecuta la alerta de la JS. Interesante. Pero, ¿qué implicaciones tiene esto? Estaba viendo http://railscasts.com/episodes/27-cross-site-scripting y Ryan B menciona que "no es tan completo, ya que no escapa a todas las etiquetas html, que no es tan segura". .. –

Cuestiones relacionadas