Hvis du tar brukerundersøkelser gjennom en nettside, og sette det inn i en SQLite 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 SQLite 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 du en SQLite 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)) {$ db = new SQLiteDatabase ('filnavn'); $ resultere = @ $ DB > spørring ("SELECT * FROM brukere WHERE brukernavn = $ kampene [0]");} else {echo "brukernavn ikke akseptert";}
For å demonstrere problemet, bør du vurdere dette utdraget:
$ name = "Qadir '; DELETE FROM brukere;"; @ $ DB > spørring ("SELECT * FROM brukere WHERE brukernavn =' {$ name}");
Funksjonen samtalen er ment å hente en post fra brukerne bordet der navnet kolonnen samsvarer med navnet spesifisert av brukeren. Under normale omstendigheter, $ name
ville 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 katastrofe. Injisert DELETE spørringen fjerner alle poster fra brukere
Det er databaser grensesnitt som ikke tillater spør stabling eller utførende flere spørringer i en enkelt funksjon samtale. Hvis du prøver å stable spørringer, mislykkes samtalen, men 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.
< p> Du kan håndtere alle escape-tegn smart i skriptspråk som Perl og PHP. Programmeringsspråket PHP gir funksjonen string sqlite_escape_string ()
å flykte inn tegn som er spesielle for SQLite
if (get_magic_quotes_gpc ()) {$ name = sqlite_escape_string (navn $);}. $ Resultat = @ $ DB > spørring ("SELECT * FROM brukere WHERE brukernavn = '{$ name}");
Selv om koding gjør det trygt å sette inn data, det vil gjengi enkle tekst sammenligninger og som
klausuler i spørringene ubrukelig for kolonnene som inneholder binære data
Hold et notat som addslashes () bør ikke brukes til å sitere dine strenger for SQLite spørringer.; det vil føre til merkelige resultater når du henter dine data. Anmeldelser