2009-05-23 14 views
10

Esiste una buona libreria Python mantenuta attiva per filtrare input dannosi come XSS?Libreria Python per filtraggio XSS?

+0

Bene tutto ciò che consente di rimuovere i tag HTML lo farà. Hai avuto requisiti speciali per le cose che vuoi mantenere? – SpliFF

+0

Vorrei solo far notare che il commento sopra è molto ingenuo, se lo leggete, considerate anche la lettura: https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet come inizio. – mkoistinen

risposta

0

La libreria Strip-o-Gram sembra molto carina. Non l'ho verificato correttamente, ma sembra che funzioni bene (ad esempio, puoi inserire nella whitelist i tag HTML che hai specificato, così come l'HTML che sfugge a qualsiasi cosa brutta).

Ecco il frammento di esempio di utilizzo, citato da quella pagina:

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) 

Speranza che aiuta.

+2

Non ci si può semplicemente fidare che gli aggressori inseriscano dei buoni tag. A meno che lo strip-o-gram non lavori su tag fortemente codificati (vedi la lista di rsnake: http://ha.ckers.org/xss.html) questo non funzionerà. – Mystic

+0

Idem come diceva Mystic. Sembra che lo Strip-o-gram (il ragazzo sembra qualcosa che potresti ordinare per rallegrare un amico solitario) non è descritto come una difesa contro l'XSS. –

8

Se si utilizza un framework Web e un motore di template come Jinja2 esiste la possibilità che il motore di template o il framework abbia qualcosa di costruito proprio per quello.

C'è qualcosa nel modulo cgi che può aiutare a:

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

anche Jinja2 fornisce fuga:

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

A partire da Python 3.4+, c'è 'html.escape' in stdlib! –