Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
databázy API Python , MySQLdb je často zbraň voľby . Kódery môžu vyhnúť priamemu zápisu do modulu pomocou rozhrania MySQL . To umožňuje vykonávanie MySQL C API , ale to nemusí byť vždy jednoduchá úloha . MySQL C API má svoje vlastné objektovo orientované procesy . Pri práci s únikových funkcií, " mysql_escape_string ( ) " prekladá v MySQL ako " _mysql.escape_string ( ) . " Problém s touto stratégiou je , že bez riadnej úniku pre MySQL v Pythone , tam môže byť problémy spojené s komplikovanými reťazcov , pretože nemusia uniknúť správne .
vkladanie premenných
Ďalší problém nastane , keď kódery vloženie premenné do MySQL tabuľky . V nasledujúcom úryvku , kodér vloží štyri premenné v tabuľke .
Cursor.execute ( " " , " INSERT INTO skrine ( topánky , ponožky , legwarmer , horné ) hodnoty ( Nike , Puma , vlna , adidas ) " " " )
Tento úryvok nemusí fungovať, ak kodér pridáva riadnu escape znak , ako je " % s " . Dvojité úvodzovky používané sú tiež uniknúť znaky , ale pri úniku premenných , kodér musí použiť " % s " .
Znak percenta
modifikátory používané v SQL , ktoré sú zodpovedné za záväzné parametre , môže byť trochu mätúce . Syntax " printf " štýl je bežne používané v MySQL klientskej knižnice . Revidovaná úryvok by potom mal vyzerať takto :
cursor.execute ( " " , " INSERT INTO skrine ( topánky , ponožky , legwarmer , horný ) VALUES ( % ( Nike ) s , % ( puma ) s , % ( vlna ) s , % ( adidas ) , s ) " " " )
Avšak , pridanie escape znaky nestačí na zmiernenie problému . Stačí pridať tieto znaky sám teraz je kód náchylné k otázkam formátovacích reťazcov a otvorené škodlivým útokom .
Úvahy
kodér môže byť schopný kód trezor , pracovný kód pridaním ďalších úprav kódu . Tu je konečný pracovný úryvok :
cursor.execute ( " " , " INSERT INTO Songs skrine ( topánky , ponožky , legwarmer , horný ) VALUES ( % s , % s , % s , % s ) " , " " , ( nike , puma , vlna , adidas ) )
Ďalší problém môže nastať s percentuálne symbolom . Ak kodér použije percentuálna znamení v skripte , ( konkrétne v reťazci dotazu , " nedarí execute ( ) " ) , by malo byť riadne unikol - musia byť použité dva percentuálne znamenie . Jeden z percentuálnych znamení bude slúžiť ako identifikátor pre útek .