Python , ett programmeringsspråk utrustad med dynamisk semantik , är en favorit bland programmerare och kodare , men så är också MySQL . Integrering av MySQL med Python är ofta inte mycket av ett problem för erfarna programmerare , men kodning kan bli lite invecklad på grund av C API _mysql funktion kartläggning . Escaping är ett av dessa problem. MySQLdb
För Python databas-API är MySQLdb ofta vapen val . Kodare kan undvika direkta skrivning till modulen genom att använda MySQL -gränssnittet . Detta möjliggör genomförandet av MySQL C API , men det kan inte alltid vara en enkel uppgift . MySQL C API har egna objektorienterade processer . När du arbetar med escape -funktioner , " mysql_escape_string ( ) " översätter i MySQL som " _mysql.escape_string ( ) . " Problemet med denna strategi är att utan ordentlig flyr för MySQL i Python , kan det finnas problem med komplicerade strängar , eftersom de inte kan komma undan ordentligt . Addera sätta variabler
annat problem uppstår när kodare infoga variabler i MySQL tabeller . I följande utdrag kodaren skär fyra variabler i en tabell .
Cursor.execute ( " " " INSERT INTO skåp ( skor , strumpor , benvärmare , övre ) VALUES ( nike , puma , ull , adidas ) " " " ) katalog
kod kanske inte fungerar om inte kodaren lägger en ordentlig escape tecken som " % s " . De dubbla använt citat fly också tecken , men för att fly variabler måste kodaren använda " % s " .
Procenttecken
Modifierarna används i SQL-satsen som är ansvarig för bindning av parametrarna kan vara lite förvirrande . " Printf " stil syntax används ofta i MySQL klient biblioteket . Den omarbetade utdrag bör då se ut så här :
cursor.execute ( " " " INSERT INTO skåp ( skor , strumpor , benvärmare , övre ) VALUES ( % ( nike ) s , % ( puma ) s , % ( ull ) s , % ( adidas ) s ) " " " ) katalog
dock lägga till escape-tecken är inte tillräckligt för att lindra problemet . Bara att lägga till dessa karaktärer ensam nu gör koden mottaglig för formatsträngssårbarheter frågor och öppen för angrepp .
Överväganden
kodare kanske kan koda en säker , arbetar kod genom att lägga redigeringar vidare till koden . Här är det slutliga arbetet kod :
cursor.execute ( " " " INSERT INTO Songs skåp ( skor , strumpor , benvärmare , övre ) VALUES ( % s , % s , % s , % s ) " , " " , ( nike , puma , ull , adidas ) ) katalog
annat problem kan uppstå med den procentuella symbolen . Om kodaren använder en procentsats skylt i skriptet , ( särskilt i frågesträngen , " att inte exekvera ( ) " ) , bör det väl rymt - två procentenheter tecken måste användas . En av de procentuella skyltarna kommer att fungera som identifierare för flykt .