SQL Injector vulnerabil

Ma si miram ca nimeni nu aminteste de filter_var

$ok = filter_var($value, FILTER_VALIDATE_BOOLEAN);
$id = filter_var($value, FILTER_VALIDATE_INT);

Documentatie: http://php.net/manual/en/function.filter-var.php

4 Likes

mysql_real_escape_string nu o sa te scape de vulnerabilitati complet.

Solutia lui @razvanphp este mai sigura(nu complet), dar devine obositor sa faci asta la toate variabilele(in caz ca mai ai si altele in afara de acel id).

Iti recomand MeekroDB daca vrei siguranta impotraiva SQL Injection. Este un library pe care il poti folosi in loc de functiile existente in PHP. Te poate scapa si de operatii inutile, dar principalul atu este securitatea.
http://meekro.com/

1 Like

real_escape_string te va scăpa de vulnerabilități complet atunci când vei ști s-o folosești. Atunci când nu știi, apelezi la regexp, filter_var și librării scrise de alții.
Această funcție are un singur rol: acela de a securiza datele ce urmează a fi folosite într-o interogare, NU de a le face aproape sigure.

Dacă vreți să faceți referiri la articole care mă contrazic, atunci arătați-mi unul scris de Rasmus însuși sau de altcineva din echipa PHP, în care să explice de ce funcția lor nu poate face singurul lucru pe care a fost concepută să-l facă. Orice alt articol scris de un oarecare pe blogul personal este echivalentul lui “așa zice lumea”.

Să fie clar un lucru: eu înțeleg și pot reproduce condițiile în care real_escape_string nu va securiza corespunzător datele și ar putea fi păcălită, dar asta nu ține de vreo vulnerabilitate a funcției, ci de folosirea ei improprie. Voi puteți?

V-am dat în mesajul meu anterior o mostră de cod, de-a dreptul banal, în care singura măsură de protecție este real_escape_string și v-am provocat să-l exploatați, dar v-ați făcut că nu-l vedeți. Când cineva va veni cu un string pe care să-l pot copia și introduce în formularul acela pentru a-l exploata, jos pălăria și îmi voi cere scuze public pentru greșeala făcută. Până atunci însă am să ignor afirmațiile voastre complet nefondate și voi continua să am încredere în echipa care a conceput funcția și în experiența mea de 10 ani în domeniu.

Vă mulțumesc pentru atenție și mă retrag din această discuție.

6 Likes