[Python] SQL injection [era: Esclusione della query vuota]
Daniele Varrazzo
piro a develer.com
Gio 11 Set 2014 12:39:03 CEST
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
Maggiori informazioni sulla lista
Python