Când executați o interogare SQL, trebuie să vă curățați șirurile sau utilizatorii pot executa SQL rău intenționat pe site-ul dvs. Web.
Eu de obicei am doar o funcție escape_string (blah), care:
\
) cu evadări dublu ( \\
). '
) cu un citat escape ( \'
). Este aceasta adecvată? Există o gaură în codul meu? Există o bibliotecă care poate face asta rapid și fiabil pentru mine?
Aș dori să văd soluții grațioase în Perl, Java și PHP.
Ce limbă folosiți? Se pare că aproape toți dintre ei au built-in funcții de evacuare SQL care ar fi mai bine de utilizat.
De exemplu, PHP are mysql_real_escape_string și < a href = "http://us2.php.net/manual/en/function.addslashes.php" rel = "nofollow noreferrer"> adaugă-lăgări .
Mi-ar scuza, de asemenea, comentariile (dublă linie)
--
Ești mai bine să folosiți declarații pregătite cu substituenți. Folosiți PHP, .NET ... oricum, declarațiile pregătite vor oferi mai multă siguranță, dar aș putea oferi o mostră.
Nu sunt sigur dacă MySql acceptă interogări parametrizate, dacă da, trebuie să depuneți eforturi pentru a merge pe acest traseu. Acest lucru va asigura că utilizatorii nu pot face nimic rău intenționat.
În caz contrar, unele caractere "rele" în plus față de ceea ce ați menționat vor fi punct și virgulă (;) și comentarii (- și / * * /).
În PHP, îl folosesc pe acesta și voi aprecia orice comentariu despre el:
function quote_smart($valeur)
{
if (get_magic_quotes_gpc())
$valeur = stripslashes($valeur);
if (!is_numeric($valeur))
$valeur = mysql_real_escape_string($valeur);
return $valeur;
}
$IdS = quote_smart($_POST['theID']);
$sql = "
SELECT * FROM Students
WHERE IdStudent={$IdS};
";
Necesită încă o verificare dacă un câmp poate fi NULL:
$picture = NULL;
$theidyouwant = 7;
$Name = 'WOOD';
if(is_null($picture))
$p = 'NULL';
else
$p = "'".quote_smart($picture)."'";
$IdS = quote_smart($theidyouwant);
$requete = "SELECT * FROM Students
WHERE IdStudent={$IdS} AND
PictureStudent={$p} AND
NameStudent='{$Name}';
";
That's it enjoy ! (hope the post will correctly send underscores and not _ ;)
Un lucru minunat de utilizat în PHP este DOP . Este nevoie de o mulțime de presupuneri de a se ocupa de securizarea SQL (și toate chestiile dvs. SQL în general). Acesta susține declarații pregătite, care merg foarte departe spre atenuarea atacurilor SQL Injection.
A great primer on PDO is included in the book The PHP Anthology 101 Essential Tips, Tricks & Hacks by Davey Shafik etc. 2nd Ed. Makes learning a breeze and is excellent as a reference. I don't even have to think about anything other than the actual SQL Query anymore.
Pentru securitate maximă, performanță și corectitudine, folosiți declarații pregătite. Iată cum puteți face acest lucru cu multe exemple în diferite limbi, inclusiv PHP:
https://stackoverflow.com/questions/1973/ ce-este-the-best-way-to-Evitați-sql-injectare-atacuri
Utilizați interogări pregătite / parametrizate!