home  comanda on-line  oferta webhosting  oferta reseller  asistenta / tichete  login  contact 
SUPORT ONLINE
Tichet asistenta
Asistenta - cuprins
Primii pasi
Transfer domenii
Configurare E-Mail
Intrebari frecvente
Abuzuri
Descriere facilitati

Evitarea injectării SQL

Ce înseamnă "SQL Injection" ?

Atacurile SQL reprezintă o amenintare serioasă asupra unui sit care are implementat o bază de date. Metoda în spatele atacului este ușor de învățat, iar pagubele pot varia de la considerabil, la sistem/sit compromis. În ciuda acestor riscuri un număr foarte mare de situri sunt susceptibile unei astfel de forme de atac. Articolul de mai jos prezintă o metodă pentru a vă proteja de un astfel de atac.

Primul pas în combaterea atacurilor SQL, consta în întelegerea lor. Un atac SQL apare cand un vizitator al sitului dvs. introduce anumite date într-un formular cu scopul de a schimba rezultatul unui query MySQL.

Exemplu concret de atac

Să luăm ca exemplu o pagină de login, o persoana poate utiliza urmatorul tip de atac pentru a obtine acces la o zona securizata a sitului. Daca query-ul de verificare a utilizatorului și a parolei arata in felul următor:

"SELECT * FROM users WHERE username = '".$_POST['username']."' AND password = '".$_POST['password']."'" 

O persoana ar putea introduce orice „username“, iar pentru „password“ urmatorul string: ' OR =. Ca rezultat, query-ul de mai sus arată în felul urmator:

"SELECT * FROM users WHERE username = 'anyuser' AND password = '' OR ''=''"

Dupa cum puteți observa, atacul tip injectare SQL poate fi destul de serios, depinzând de datele pe care le are la dispoziție după autentificare. Din acest motiv, este foarte important să protejati situl împotriva atacurilor tip injectare. Metoda de prevenire va fi prezentată pentru limbajul PHP.

Cum ne protejăm ?

În majoritatea cazurilor, flag-ul PHP „magic_quotes_gpc“ este setat pe „On“ în „php.ini“ (valoare implicită în PHP) care adaugă caracterul '\' (backslash) pentru escaping-ul caracterelor ' (apostrof), “ (ghilimele), \ (backslash), si caraterele nule. Totuși această metodă nu este 100% eficientă, pentru că mai există și alte caractere pentru care trebuie aplicat escaping-ul. Există o funcție în PHP care face escaping-ul tuturor caracterelor MySQL care ar putea ajuta la injectarea unui cod aditional SQL în query-uri. Funcția se numeste mysql_real_escape_string()

Trebuie avut grijă la folosirea funcției deoarece dacă deja flag-ul PHP „magic_quotes_gpc“ este setat la valoarea „On“ și se folosește funcția mysql_real_escape_string() veți ajunge sa dublați operația de escaping. Urmatoarea funcție găsită pe situl oficial PHP aplică corect escaping-ul tuturor query-urilor indiferent dacă flag-ul PHP „magic_quotes_gpc“ este setat pe „On“ sau „Off“.

<?php
function quote_smart($value)
{
    if (get_magic_quotes_gpc()) {
        $value = stripslashes($value);
    }
    if (!is_numeric($value)) {
        $value = "'" . mysql_real_escape_string($value) . "'";
    }
    return $value;
}
?> 

După cum puteți observa, funcția quote_smart() va adăuga automat string-ul între apostroafe.

 

    ROHOST® este un serviciu al firmei ROSPOT S.R.L.
© 2000-2008 ROSPOT S.R.L.