Hvis du tar brukerundersøkelser gjennom en nettside, og sette det inn i en MySQL database, er det en sjanse for at du har igjen selv vidåpne for et sikkerhetsproblem kjent som SQL Injection. Denne leksjonen vil lære deg hvordan du kan bidra til å forhindre at dette skjer, og hjelpe deg å sikre dine skript og MySQL uttalelser. 
 
 Injeksjon vanligvis oppstår når du spør en bruker for innspill, som deres navn og i stedet for et navn de gir deg en MySQL erklæring om at du vil uvitende kjøre på databasen 
 
 Aldri klareringsbruker levert data, bearbeide disse dataene kun etter validering.; Som regel gjøres dette ved mønstergjenkjenning. I eksempelet nedenfor, er brukernavnet begrenset til alfanumeriske tegn pluss understreking og til en lengde på mellom 8 og 20 tegn -. Endre disse reglene etter behov 
 if (preg_match ("/^ \\ w {8,20} $ /" , $ _GET ['brukernavn'], $ kamper)) {$ resultat = mysql_query ("SELECT * FROM brukere WHERE brukernavn = $ kampene [0]");} else {echo "brukernavn ikke akseptert";} 
 Å demonstrere problemet, bør du vurdere dette utdraget: 
 //ment innspill $ name = "Qadir '; DELETE FROM brukere;"; mysql_query ("SELECT * FROM brukere WHERE name =' {$ name}"); 
 funksjonen samtalen er ment for å hente en post fra brukere bordet, hvor navnet kolonnen samsvarer med navnet spesifisert av brukeren. Under normale omstendigheter ville $ name bare inneholde alfanumeriske tegn og kanskje mellomrom, for eksempel streng Ilia. Men her, ved å legge en helt ny forespørsel til $ navn, blir kallet til databasen til katastrofen: det injiserte DELETE spørringen fjerner alle poster fra brukere 
 
 Heldigvis, hvis du bruker MySQL, den mysql_query () -funksjonen. tillater ikke spør stabling eller utfører flere spørringer i en enkelt funksjon samtale. Hvis du prøver å stable spørringer, mislykkes samtalen. 
 
 Men andre PHP database utvidelser, for eksempel SQLite og PostgreSQL, lykkelig utføre stablet spørringer, gjennomføre alle de spørsmål som er gitt i en streng og skape et alvorlig sikkerhetsproblem . 
 
 Hindre SQL Injection: 
 
 Du kan håndtere alle escape-tegn smart i skriptspråk som Perl og PHP. MySQL forlengelse for PHP gir funksjonen mysql_real_escape_string () å flykte inn tegn som er spesielle for MySQL 
 if (get_magic_quotes_gpc ()) {$ name = stripslashes ($ navn);}. $ Name = mysql_real_escape_string ($ navn); mysql_query ("SELECT * FROM brukere WHERE name = '{$ name}"); 
 lignende dilemma: 
 
 For å ta LIKE dilemma, må en tilpasset rømmer mekanisme konvertere brukerlevert% og _ tegn til konstanter. Bruk addcslashes (), en funksjon som lar deg angi en karakter rekke å flykte 
 $ sub = addcslashes (mysql_real_escape_string («% something_"), "% _");. //$ Sub == \\% noe \\ _mysql_query ("SELECT * FROM meldinger der emnet LIKE '{$ sub}%'");

