SQL injection prakticky vyuziva fakt ze vstupne data z vasich formularov sa posielaju do databazy nechranene. Ako ich teda ochranit. Prvy postup bude pre tich ktori pouzivaju verziu PHP 4.3 a vyssiu a druhy pre tich co uz pouzivaju verziu PHP 5 a viac. Myslim ze zistit si verziu ktoru pouziva, to dokaze kazdy.
Verzia PHP 4.3 a vyssia
<?
/*
Funkcia: sql_fixacia( $xCode )
Popis: "Fixacia" stringu SQL kodu k prevencii pred SQL injection.
Parametre: $xCode : SQL kod ktory potrebujete fixovat.
Ukazka: mysql_query('UPDATE table SET value="' . sql_fixacia("' SET id='4'") . '" WHERE id="1"');
Poziadavky: PHP verzia 4.3 a viac
*/
function sql_fixacia( $xCode ) {
if ( function_exists( "mysql_real_escape_string" ) ) { // Ak je PHP verzia > 4.3.0
$xCode = mysql_real_escape_string( $xCode ); // Escapuje MySQL string.
} else { // Ak je PHP verzia < 4.3.0
$xCode = addslashes( $xCode ); // Pred citlive charaktere vlozi spatne lomitka \
}
return $xCode; // Vrati fixovany kod
}
?>
Verzia PHP 5 a viac
<?
/*
PHP 5+ ONLY - Prevencia pred SQL injection a XSS utokom
1 *REQUIRED* value, 1 <OPTIONAL> value to call this function:
$input = Vstupny input
$is_sql = Kontrola ci nahodou $input nie je sql query
Ukazka pouzitia:
$username = sterilize($_POST['username']);
$query = "SELECT * FROM users WHERE username = '$username'";
*/
function sterilize ($input, $is_sql = false)
{
$input = htmlentities($input, ENT_QUOTES);
if(get_magic_quotes_gpc ())
{
$input = stripslashes ($input);
}
if ($is_sql)
{
$input = mysql_real_escape_string ($input);
}
$input = strip_tags($input);
$input = str_replace("
", "\n", $input);
return $input;
}
?>
Ako vidime pri druhom sposobe uz zistujeme ci mame nastavenie magic quotes. Takisto zistujeme ci miesto vlozenia do inputu nie je vlozena hned sql query.
Pokial sa pozrieme na oba sposoby pouzitia, cela zalezitost je otazkou par minut. Akurat je potrebne si upravit subor, ktory nam spracovava akykolvek formular pouzity na webe, tak aby spracoval vstupne data pred vlozenim do databazy. Akekolvek podcenovanie tejto bezpecnostnej problematiky, moze mat za nasledky v lepsom pripade par minut casu na opravu, v horsom sa moze stat ze vas web zmizne z povrchu Internetu.