Tutorial iniezione MySQL

June 22

MySQL iniezione è atto di inserire dichiarazione MySQL in un database all'insaputa del proprietario del database. Si è generalmente fatto sfruttando i campi di input utente che non sono protetti adeguatamente. Invece di fornire reale input che proprietario del database ha chiesto, l'utente inserisce una dichiarazione MySQL che cambia il comportamento della query per dare la possibilità all'utente di iniettare per manipolare il database.

iniezioni di MySQL

Il modo più semplice per capire e imparare ciò che l'iniezione di MySQL fa davvero
è quello di dare un'occhiata a un esempio. Uno dei modi popolari di usare MySQL
iniezioni è quello di bypassare i controlli d'accesso a siti web. Ecco un esempio di un
sito web che utilizza il seguente modulo per autenticare l'utente:

<Form name = \ azione "userlogin \" = \ method "userlogin.php \" = \ "post \">
Login: <input type = \ "text \" name = \ "username \">
Lozinka: <input type = \ "text \" name = \ "password \">
<Input type = \ "submit \">
</ Form>

Dopo aver premuto presentare i dati immessi viene poi inviato alla pagina di userlogin.php che riceve e attraversa una query sul database per controllare il livello di accesso utente ha e se ha inserito username e password corretti.

<?
$ Username = $ _POST [ 'username']
ANDARE
$ Password = $ _POST [ 'password']
ANDARE
$ Query = \ "SELECT username, password da parte degli utenti dove username =
'$ Username' e la password = '$ password' \ "
ANDARE
?>

Questo tipo di modulo di login è aperta allo sfruttamento da attacchi di iniezione di MySQL. Per accedere al sito ogni utente può inserire codice seguente: 'OR 1 = 1-- nome utente e' OR 1 = 1 per la password.

Query sarà ora simile a questa:
$ Query = \ "SELEZIONA nome utente, password da parte degli utenti dove username = '' O
1 = 1-- 'e la password =' ​​'OR 1 = 1 \ "
ANDARE

Questa query selezionerà il nome utente e la password da parte degli utenti, dove non esistono i nomi utente o la password ( '' parte) o se uno è uguale a uno. Come uno fa uno in tutti i casi la sicurezza del database è compromessa. sono stati aggiunti due trattini prima apostrofo per rendere MySQL ignorare apostrofo che è ormai superfluo. Questo è solo un tipo di attacco con iniezione di MySQL. Un'altra variazione di questo attacco è ottenere
accesso a più informazioni rispetto all'utente è consentito.

Ora guardate un esempio in cui proprietario del database utilizza seguente interrogazione
per ottenere i dati per la visualizzazione su account utente pagina info.

$ Query = \ "SELECT * FROM utenti WHERE username = '$ name' \"
ANDARE

Se questo tipo di query non è protetto utente malintenzionato è in grado di ingresso
'OR 1 = 1-- per bypassare il check nome utente.
$ Query = \ "SELECT * FROM utenti WHERE username = '' OR 1 = 1-- '\"
ANDARE
Questa query ora non selezionerà solo i dati degli utenti, ma i dati di tutti gli utenti nella tabella "utenti".

Protezione contro MySQL Iniezioni

Ci sono molti modi per proteggere contro le iniezioni di MySQL. Infatti iniezioni MySQL sono le minacce solo se lo sviluppatore ha ignorato la minaccia e fallito nel proteggere il suo codice. Il modo più semplice per proteggersi da iniezioni in PHP e MySQL combinazione è quello di utilizzare la funzione PHP: "mysql_real_escape_string".

Tornando al primo esempio.
<?
$ Username = $ _POST [ 'username']
ANDARE
$ Password = $ _POST [ 'password']
ANDARE
$ Query = \ "SELECT username, password da parte degli utenti dove username =
'$ Username' e la password = '$ password' \ "
ANDARE
?>

Per la protezione contro le iniezioni MySQL usi diretti di input utente devono essere
filtrata attraverso "mysql_real_escape_string". Funzione "mysql_real_escape_string" sfuggirà tutti i caratteri speciali MySQL eliminando la possibilità di cambiare il comportamento della nostra interrogazione.

<?
$ Username = mysql_real_escape_string ($ _ POST [ 'username'])
ANDARE
$ Password = mysql_real_escape_string ($ _ POST [ 'password'])
ANDARE
$ Query = \ "SELECT username, password da parte degli utenti dove username =
'$ Username' e la password = '$ password' \ "
ANDARE
?>