Sunteți pe pagina 1din 2

Pentru SQL Injection

--------------------

Este bine sa se faca filtrare dupa tipul variabilelor.
Daca este integer sa se obtina integer din variabila, oricare ar fi input-ul.
Se poate face prin cast-ing, rezultatul fiind truncherea numarului pana la primu
l caracter diferit de cifra.

$id = (int)$_GET['id'];

Exemplu 1:

Input:
http://filebox.ro/?id=12345' or 1='1

Rezultat:
$id = 12345

======================
Unii oameni prefera sa foloseasca expresii regulate pentru filtrare.
Elimina tot ce nu este cifra, astfel raman doar cifrele, oriunde s-ar afla ele i
n input.
$id = preg_replace("/^d/", "", $_GET['id']);

Exemplu 2:

Input:
http://filebox.ro/?id=12345' or 1='1

Rezultat:
$id = 1234511;

======================
Un alt exemplu de cast-ing folosind sprintf.

$query = sprintf("SELECT file_id FROM files WHERE id='%d'", $_GET['id']);

Exemplu 3:

Input:
http://filebox.ro/?id=12345' or 1='1

Rezultat:
$query = "SELECT file_id FROM files WHERE id='12345'";


==================================================
Pentru filtrare de tipul string sunt necesare 2 lucruri:
mysql_real_escape_string()
si ' (apostroafe)

Exemplu 1:
$queryRetrieveId = "SELECT file_id FROM files WHERE username=". mysql_real_escap
e_string($_GET['username']) ."";

Rezultat:
Codul este vulnerabil la SQL Injection.
Desi se foloseste mysql_real_escape_string, valoarea cu care se compara coloana
"username" nu este inchisa in apostroafe,
ceea ce inseamna ca atacatorul nu are nevoie sa introduca ' pentru a iesi din da
te si a putea injecta SQL.
http://filebox.ro/?id=12345 or 1=1 <-- este SQL valid si se executa


Exemplu 1:
$queryRetrieveId = "SELECT file_id FROM files WHERE username='". mysql_real_esca
pe_string($_GET['username']) ."'";

In acest caz atacatorul trebuie neaparat sa introduca ' pentru a termina definit
ia content-ului si a putea introduce cod SQL.
Totusi daca el introduce ' functia mysql_real_escape_string o sa transforme cara
cterul din delimitator in content si practic este asimilat
o data cu restul datelor introduse in aceeasi coloana SQL.

S-ar putea să vă placă și