2009-05-23 19 views
10

¿Existe una buena biblioteca de python mantenida activamente disponible para filtrar entradas maliciosas como XSS?Biblioteca Python para el filtrado XSS?

+0

bien cualquier cosa que elimina las etiquetas HTML va a hacer eso. ¿Tenía requisitos especiales para las cosas que quiere mantener? – SpliFF

+0

Simplemente me gustaría señalar que el comentario anterior es muy ingenuo, si lees eso, considera también leer: https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet como inicio. – mkoistinen

Respuesta

0

La biblioteca Strip-o-Gram se ve bastante bien. No lo he comprobado correctamente, pero parece que hace las cosas bien (es decir, puede incluir en la lista blanca las etiquetas HTML que especifique, así como HTML, escapando cualquier cosa desagradable).

He aquí el fragmento de ejemplo de uso, citado de esa página:

from stripogram import html2text, html2safehtml 
    mylumpofdodgyhtml # a lump of dodgy html ;-) 
    # Only allow <b>, <a>, <i>, <br>, and <p> tags 
    mylumpofcoolcleancollectedhtml = html2safehtml(mylumpofdodgyhtml,valid_tags=("b", "a", "i", "br", "p")) 
    # Don't process <img> tags, just strip them out. Use an indent of 4 spaces 
    # and a page that's 80 characters wide. 
    mylumpoftext = html2text(mylumpofcoolcleancollectedhtml,ignore_tags=("img",),indent_width=4,page_width=80) 

Espero que ayude.

+2

No puedes confiar en que los atacantes pongan buenas etiquetas. A menos que strip-o-gram funcione en etiquetas fuertemente codificadas (ver la lista de rsnake: http://ha.ckers.org/xss.html) esto no funcionará. – Mystic

+0

Lo mismo dijo Mystic. Parece que Strip-o-gram (chico suena como algo que podrías ordenar para animar a un amigo solitario) no se describe como una defensa contra XSS. –

8

Si está utilizando un framework web y un motor de plantillas como Jinja2, existe la posibilidad de que el motor de plantillas o el framework tenga algo incorporado solo para eso.

Hay algo en el módulo de CGI que puede ayudarle a:

cgi.escape('malicious code here'), ver: http://docs.python.org/library/cgi.html#cgi.escape

también Jinja2 proporciona escapar:

from jinja2 import utils 
str(utils.escape('malicious code here')) 
+0

Comenzando con Python 3.4+, ¡hay 'html.escape' en stdlib! –