SQL injections vältimine

  |   by kadriad   |   Blogi, mysql, php  |  No Comments

Puutusime kokku sellise probleemiga, et kui paha kasutaja tahab andmebaasi midagi halba sisestada.

Selle takistamiseks on mitmeid võimalusi.

Meie puhul oli tegemist veebivormiga, mis salvestas andmeid andmebaasi (php + mysql).

Kõigepealt kasutasime veebivormi kontrolli.

Sellest kirjutasin siin:

http://www.adaptorconsulting.com/eesti-javascript-form-validatation/?lang=ee

Lisan ka juurde, kui on soovi kontrollida, et tähed oleksid ainult tähed ja tühikud.

Siis selles variandis = alphanum_s

põhiosa:

"[^A-Za-z0-9øåæÆØÅ\\s]"
"[^A-Za-z0-9äöüõšžÕÄÖÜŠŽ\\s]"

Ehk siis lõppu kirjutada endale sobivad täpitähed.

Andmete savestamisel tuleb andmetele lisada kontroll-funktsioon:

 

function cleanQuery($string)

{

global $db;

if(get_magic_quotes_gpc()) // prevents duplicate backslashes

{

$string = stripslashes($string);

}

 

$badWords = array(“/delete/i”, “/update/i”,”/union/i”,”/insert/i”,”/drop/i”,”/http/i”,”/–/i”);

$string = preg_replace($badWords, “”, $string);

 

if (phpversion() >= ‘4.3.0’)

{

$string = mysqli_real_escape_string($db,$string);

}

else

{

$string = mysqli_escape_string($db,$string);

}

return $string;

}

 

ja koodis siis küsida:

if (isset($_POST['persons'])) $persons = cleanQuery($_POST['persons']);

Abi sain siit:

http://www.tech-evangelist.com/2007/11/05/preventing-sql-injection-attack/

http://phpcenter.eu/vaatafoorumiteemat.php?id=4896