[python] hash, mysql

azurIt azurit na pobox.sk
Pátek Březen 20 01:20:43 CET 2009


Ja samozrejme nehovorim o klasickom formatovani ale o sposobe, akym to robi MySQLdb (pretoze o nom sa bavime) - a tam teda naozaj nevidim dovod, preco by sa nemohlo pouzit '%s'.

Ak sa nenahnevas slush, tak ta malo poupravim nech tu nelieta chybny kod v konfere. Parametre musia ist ako tuple, cize:

"SELECT * FROM blabla WHERE promenna=%s", (promenna,)   # ano, ta ciarka v zatvorke je tam ok, musi tam v tomto pripade byt



-----Pôvodná správa-----
Od: slush [slush na slush.cz]
Komu: Konference PyCZ 
Predmet: Re: [python] hash, mysql

Tady vidim vzajemne nepochopeni. Jak je videt, bezpecnostni diry v aplikacich casto zavisi i na jedinem znaku :-). Porovnejte nasledujici:

"SELECT * FROM blabla WHERE promenna='%s'" % promenna
"SELECT * FROM blabla WHERE promenna=%s", promenna
 
Uz je videt ten rozdil? Prvni radek je klasicke python prirazeni - zadne pridavani uvozovek, zadna ochrana proti SQL injection apod. Druhy priklad, jako jednotlive parametry predavane do funkce knihovny MySQLdb, jiz toto vse resi. Jediny rozdil je v carce versus procentu.
 
Marek



2009/3/20 Dan Pressl <nu.frix na gmail.com>
 Prekvapuje me to, ze %s v kombinaci s % provadi, pokud dobre vim,
 jenom nahrazeni %s nejakym retezcem. Z sqlite3 sem zvykly pouzivat ?
 misto %s prave kvuli odstraneni moznosti SQL Injection, aby prave
 nedoslo k nahrazeni retezcem, ktery by nemusel byt zrovna koser:)
 
 
 


Další informace o konferenci Python