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']

$ Password = $ _POST [ 'passord']

$ Query = \ "SELECT brukernavn, passord FROM brukere WHERE brukernavn =
'$ Brukernavn "og passord =' ​​$ passord '\"

?>

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 \ "

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' \"

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-- '\"

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']

$ Password = $ _POST [ 'passord']

$ Query = \ "SELECT brukernavn, passord FROM brukere WHERE brukernavn =
'$ Brukernavn "og passord =' ​​$ passord '\"

?>

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'])

$ Password = mysql_real_escape_string ($ _ POST [ 'passord'])

$ Query = \ "SELECT brukernavn, passord FROM brukere WHERE brukernavn =
'$ Brukernavn "og passord =' ​​$ passord '\"

?>