Ca „profesie de bază” sunt programator PHP şi de multe ori mă minunez cât de defectuos sunt scrise unele aplicaţii web, atât open-source cât şi cele cu sursă închisă. Nu stau acum să analizez un software anume şi nu vreau să arăt vinovaţii cu degetul, pentru că nici eu nu sunt sfânt în domeniul ăsta.

Pe lângă codul alambicat, destul de multe aplicaţii s-au dovedit a fi pline de găuri de securitate şi în continuare vreau să dau o soluţie banală pentru limitarea atacurilor de tip SQL injection. Atenţie, am spus doar limitarea, nu eliminarea totală a atacurilor.

Nu vreau să vă ţin teoria cu verificarea datelor introduse de utilizator, pentru că asta auziţi peste tot.

SQL Injection

Majoritatea site-urilor au o parte publică, accesibilă tuturor, şi o parte de administrare. Ceea ce nu pot să înţeleg e de ce ambele părţi alte site-ului folosesc aceleaşi date de acces la baza de date? Atât pentru partea de administrare cât şi pentru partea publică, se foloseşte un singur user cu drepturi depline asupra tuturor tabelelor.

Caz concret, Wordpress (l-am ales ca exemplu doar pentru că îl folosesc în momentul în care scriu acest articol). Partea pe care o vedeţi voi, cititorii, ar trebui să se conecteze la baza de date folosind un user cu drepturi restrânse. Drept de citire pentru toate tabelele şi drept de scriere doar în tabela de comentarii.

Din punct de vedere tehnic, lucrul acesta nu e greu de realizat şi atunci vine întrebarea: chiar nu sunt evidente beneficiile separării drepturilor pentru accesul la db?