2011-11-08 15 views
9

En este momento estamos utilizando la gema desinfectar: ​​https://github.com/rgrove/sanitizerieles Gem desinfectar - ¿Cómo crear una lista blanca y

El problema es que si se introduce "hello & world" limpiar es el ahorro que en el PP como:

hello & world 

¿Cómo puedes incluir en la lista blanca el &? Queremos desinfectar para eliminar todas las posibles etiquetas maliciosas html y JS/script. pero estamos bien permitiendo el ampersand.

Ideas? Gracias

+0

Puede ser Sanitize.cl ean (html, Sanitize :: Config :: RELAXED) # => '&' –

+0

Gracias pero RELAXED permite casi todo. Me gustaría incluir en la lista blanca y no puedo averiguar cómo – AnApprentice

+0

@ bilash.saha La configuración relajada seguirá siendo entidades de escape html, lo que publicará seguirá generando "Hola & mundo" – Unixmonkey

Respuesta

2

Sanitize siempre transformará lo que se emite en entidades html para html/xhtml válido.

La mejor manera que podemos determinar es filtrar la salida

Sanitize.clean("hello & world").gsub('&','&') #=> "Hello & world" 
+0

Esto resolvería el & carácter, pero lo haría no escalar a todos los diversos caracteres que el motor html utilizó se convertirá en entidades. Tratar de hacer un seguimiento de todo eso sería un dolor de cabeza también. La respuesta de @ agustin a continuación es una mejor solución IMO –

+0

@ShyamHabarakada El problema que tengo con las herramientas 'sanitize()' y 'strip_tags' incorporadas en Rails es que no corrigen el formato incorrecto, por lo que un caracter' <'sin igual destruir el diseño de la página. 'strip_tags ('Strip " Strip Unixmonkey

+0

Cierto, sobre el marcado con formato incorrecto. Nos desinfectamos principalmente como una forma de evitar que HTML entre en params que no deberían tener HTML. Pelar las etiquetas a través de las strip_tags integradas funciona bien para nosotros en eso. Parece que ese es el escenario en esta pregunta también. Acepto, si desea una desinfección completa, se necesita una solución mejor que tenga un motor DOM apropiado. Pero para param sanitization, IMO, eso parece excesivo. –

1

respuesta de UnixMonkey es lo que terminamos haciendo.

def remove_markup(html_str) 
    marked_up = Sanitize.clean html_str 

    ESCAPE_SEQUENCES.each do |esc_seq, ascii_seq| 
     marked_up = marked_up.gsub('&' + esc_seq + ';', ascii_seq.chr) 
    end 
    marked_up 
    end 

Donde ESCAPE_SEQUENCES era una matriz de los caracteres que no queríamos que escaparan.

+0

Consulte http://www.escapecodes.info/ para conocer los códigos de caracteres de escape. – tee

0

A partir de Rails 4.2, #strip_tags no descodifica caracteres especiales HTML

strip_tags("fun & co") 
    => "fun &amp; co" 

De lo contrario se obtendría la siguiente:

strip_tags("&lt;script&gt;") 
    => "<script>" 

Si sólo desea que el signo me gustaría sugerir la filtración de la salida como @Unixmonkey sugerida y mantenla en & solo

strip_tags("<bold>Hello & World</bold>").gsub(/&amp;/, "&") 
    => "Hello & World" 
Cuestiones relacionadas