On 2014-09-11 10:19, Riccardo Brazzale wrote:
Scusate, conosco python ma non in maniera cosi' approfondita.

Ma :

import MySQLdb as my

stringa = "Daniele'; DROP TABLE rubrica; --"
stringa = my.escape_string(stringa)

sql = "... %s ..."
c.execute(sql, (stringa))


... non risolve il problema?

No, non lo risolve: lo crea.

Se la strategia di passaggio dei parametri alle query e' quella di escapare a mano ogni singolo argomento di ogni singola query, stai sicuro che qualcuno te lo dimenticherai. Stai sicuro che in una funzione un po' strana del tuo programma i parametri dovranno passare prima in un'altra funzione e non sara' piu' chiaro chi deve applicare l'escape - alcuni saranno doppi, altri mancanti. Stai sicuro che qualcuno lo considererai sicuro perche' e' un intero quindi non serve l'escape - ma poi quell'intero, che era il numero di pagina del tuo blog, qualcuno si accorge che se lo cambia in "a" nella url la pagina si rompe... e li' comincia il divertimento. Di' ciao al russo. Non Victor, l'altro :)

Infatti, e qui so di infrangere il cuore di molti, la striscia "little bobby tables" e' fondamentalmente sbagliata. La conseguenza della mamma hacker ("I hope you have learned to sanitize your database inputs") e' l'approccio sbagliato al problema. L'approccio giusto e' quello di *non* porsi il problema dell'escape nel proprio applicativo e delegarlo a qualcuno ad un livello sottostante (che puo' essere il driver del database o il server stesso). Questo e' un caso dove la pigrizia vince (a patto che uno si scelga i collaboratori giusti).


-- Daniele
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a