MySQL Injeksjon Tutorial
MySQL Injeksjon er lov å sette MySQL uttalelse i en database uten kjennskap til eieren av databasen. Det er vanligvis gjøres ved å utnytte bruker input felt som ikke er beskyttet på riktig måte. I stedet for å gi reell innspill som eier av databasen har bedt om, injiserer bruker en MySQL erklæring som endrer oppførselen spørringen for å gi injisere brukeren muligheten til å manipulere databasen.
MySQL injeksjoner
Den enkleste måten å forstå og lære hva MySQL injeksjon virkelig
er å ta en titt på et eksempel. En av de populære måter å bruke MySQL
injeksjoner er å omgå påloggings kontroller på nettsteder. Her er et eksempel på en
nettside som bruker følgende skjema for å autentisere brukeren:
<Form name = \ "UserLogin \" action = \ "userlogin.php \" method = \ "post \">
Logg inn: <input type = \ "tekst \" name = \ "brukernavn \">
Lozinka: <input type = \ "tekst \" name = \ "passord \">
<Input type = \ "submit \">
</ Form>
Etter å ha trykket sende data inputted sendes deretter til siden userlogin.php som mottar og går gjennom en spørring på databasen for å sjekke nivået av tilgang brukeren har, og hvis han har oppgitt riktig brukernavn og passord.
<?
$ Username = $ _POST [ 'brukernavn']
GÅ
$ Password = $ _POST [ 'passord']
GÅ
$ Query = \ "SELECT brukernavn, passord FROM brukere WHERE brukernavn =
'$ Brukernavn "og passord =' $ passord '\"
GÅ
?>
Denne typen login form er vid åpen for utnyttelse fra MySQL-injeksjon angrep. For å få tilgang til nettstedet enhver bruker kan sette inn følgende kode: 'OR 1 = 1-- for brukernavn og "OR 1 = 1 for passord.
Query vil nå se slik ut:
$ Query = \ "SELECT brukernavn, passord FROM brukere WHERE brukernavn = '' OR
1 = 1-- 'og passord =' 'OR 1 = 1 \ "
GÅ
Dette søket vil velge brukernavn og passord fra brukere hvor brukernavn eller passord ikke eksisterer ( '' del) eller hvis en er lik en. Som en tilsvarer en i alle tilfeller sikkerheten i databasen er kompromittert. To streker før apostrof ble lagt for å gjøre MySQL ignorere apostrof som nå er overflødige. Dette er bare én type angrep med MySQL injeksjon. En annen variant av dette angrepet er å komme
tilgang til mer informasjon enn brukeren har lov til.
Nå ser på et eksempel hvor database eieren bruker følgende spørring
for å få data for visning på brukerkontoen info side.
$ Query = \ "SELECT * FROM brukere WHERE brukernavn = '$ navn' \"
GÅ
Hvis denne typen spørringen ikke er beskyttet ondsinnet bruker er i stand til å legge inn
'OR 1 = 1-- å omgå brukernavn sjekk.
$ Query = \ "SELECT * FROM brukere WHERE brukernavn = '' OR 1 = 1-- '\"
GÅ
Dette søket nå ikke vil velge bare data om brukeren, men data for alle brukere i tabell "brukere".
Beskyttelse mot MySQL Injeksjoner
Det er mange måter å beskytte mot MySQL injeksjoner. Faktisk MySQL injeksjoner er trusler bare hvis utvikleren har ignorert trusselen og feilet i å beskytte sin kode. Den enkleste måten å beskytte mot injeksjoner i PHP og MySQL kombinasjonen er å bruke PHP-funksjonen: "mysql_real_escape_string".
Går tilbake til det første eksempelet.
<?
$ Username = $ _POST [ 'brukernavn']
GÅ
$ Password = $ _POST [ 'passord']
GÅ
$ Query = \ "SELECT brukernavn, passord FROM brukere WHERE brukernavn =
'$ Brukernavn "og passord =' $ passord '\"
GÅ
?>
For å beskytte mot MySQL injeksjoner direkte anvendelser av brukerinnganger må være
filtrert gjennom "mysql_real_escape_string". Funksjon "mysql_real_escape_string" vil unnslippe alle MySQL spesialtegn fjerne muligheten til å endre oppførselen vår spørring.
<?
$ Username = mysql_real_escape_string ($ _ POST [ 'brukernavn'])
GÅ
$ Password = mysql_real_escape_string ($ _ POST [ 'passord'])
GÅ
$ Query = \ "SELECT brukernavn, passord FROM brukere WHERE brukernavn =
'$ Brukernavn "og passord =' $ passord '\"
GÅ
?>