MySQL Injection är handlingen att sätta MySQL uttalande i en databas utan kunskap om ägaren av databasen . Det är generellt sett gjort genom att utnyttja fält användarens input som inte skyddas ordentligt . Istället för att ge något verkligt bidrag som ägaren av databasen har bett om , injicerar användaren en MySQL uttalande som ändrar beteende frågan att ge injicera användaren möjlighet att manipulera databasen . MySQL injektioner
Det enklaste sättet att förstå och lära sig vad MySQL injektion verkligen doesis att titta på ett exempel . Ett av de populäraste sätten att använda MySQLinjections är att kringgå inloggning kontroller på webbplatser . Här är ett exempel på awebsite som använder följande formulär för att autentisera användaren :
När du har tryckt in inmatade data skickas sedan till sidan userlogin.php som tar emot och springer genom en fråga på databasen för att kontrollera nivån av åtkomst användare har och om han har angett rätt användarnamn och lösenord .
< ? $ username = $ _POST [ ' username ' ] , $ password = $ _POST [ 'password ' ] ; $ query = " SELECT användarnamn , lösenord från användare där användarnamn = ' $ username " och lösenord = ' $ password ' " ; ? >
Denna typ av inloggning form vidöppna för exploatering av MySQL injektion attacker . För att få tillgång till webbplatsen varje användare kan infoga följande kod : ' OR 1 = 1 - för användarnamn och ' OR 1 = 1 för lösenord
Query kommer nu se ut så här : $ query = " SELECT användarnamn . , lösenord från användare där användarnamn = '' OR 1 = 1 - ' och lösenord = '' OR 1 = 1 " ;
Denna fråga kommer att välja användarnamn och lösenord från användare där användarnamn eller lösenord inte existerar ( '' del ) eller om man är lika med ett . Som ett lika med en i samtliga fall databasens säkerhet äventyras. Två streck före apostrof tillsattes för att göra MySQL ignorera apostrof som är nu överflödig . Detta är bara en typ av attack med MySQL injektion . En annan variant på denna attack är att GetAccess till mer information än vad användaren får .
Nu titta på ett exempel där databasen ägare använder följande queryto få data för visning på användarkontot info sidan .
$ query = " SELECT * FROM användare WHERE username = ' $ namn ' " ,
p Om denna typ av fråga inte är skyddat illvillig användare kan input'OR 1 = 1 - att kringgå användarnamn kolla . $ query = " SELECT * FROM användare där användarnamn = '' OR 1 = 1 - ' " , . här frågan nu inte kommer att välja bara data för användaren , men data för alla användare i tabellen " användare "
skydd mot MySQL injektioner
p Det finns många sätt att skydda mot MySQL injektioner . I själva verket MySQL injektioner är hot om utvecklaren har ignorerat hotet och misslyckats med att skydda sin kod . Det enklaste sättet att skydda sig mot injektioner i PHP och MySQL kombination är att använda PHP-funktionen : " mysql_real_escape_string "
gå tillbaka till det första exemplet < $ username = $ _POST [ ' username ' ] , $ . . ? password = $ _POST [ 'password ' ] ; $ query = " SELECT användarnamn , lösenord från användare där användarnamn = ' $ username " och lösenord = ' $ password ' "; ? >
att skydda mot MySQL injektioner direkta användningsområden för användarinmatningar måste befiltered igenom " mysql_real_escape_string " . Funktion " mysql_real_escape_string " kommer att undgå alla MySQL specialtecken bort möjligheten att förändra beteendet hos vår fråga
< $ username = mysql_real_escape_string ( $ _POST [ ' username ' ] ) ; . ? $ Password = mysql_real_escape_string ( $ _POST [ ,"' Password ' ] ) ; $ query = " SELECT användarnamn , lösenord från användare där användarnamn = ' $ username " och lösenord = ' $ password ' "; ? > Addera