Dva sposoby ochrany pred SQL injection

Vsetci co sa pohybujeme v sfere IT na kazdom kroku citame o roznych pouzitiach SQL injection alebo XSS k napadnutiu a prieniku do cudzich webov. Osobne nechapem preco to ludia robia, pokial vsak programujete akukolvek aplikaciu je logicke, ze ochrana pred takymto prienikom je dolezita. V kazdom pripade je velmi nebezpecne, akekolvek podcenovanie moznosti prieniku. Pre tich ktori nemaju prilis velke skusenosti, popisem dva sposoby ochrany.

Písmo: A- | A+
Diskusia  (10)

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
*/

SkryťVypnúť reklamu
SkryťVypnúť reklamu
SkryťVypnúť reklamu
Článok pokračuje pod video reklamou
SkryťVypnúť reklamu
Článok pokračuje pod video reklamou


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']);

SkryťVypnúť reklamu

$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.

Peter Akarkor

Peter Akarkor

Bloger 
  • Počet článkov:  39
  •  | 
  • Páči sa:  0x

Mojim domovom je miesto kde prave zijem ale vlastou navzdy zostane len jedna krajina. a mozno preto to tak trochu boli .....Kodex BlogeraFeedjit Live Website Statistics Zoznam autorových rubrík:  TutorialyNezaradeneZazitkySúkromnéPolitika

Prémioví blogeri

Matúš Sarvaš

Matúš Sarvaš

3 články
Věra Tepličková

Věra Tepličková

1,074 článkov
Yevhen Hessen

Yevhen Hessen

35 článkov
Marian Nanias

Marian Nanias

274 článkov
Lucia Nicholsonová

Lucia Nicholsonová

207 článkov
Pavol Koprda

Pavol Koprda

10 článkov
reklama
reklama
SkryťZatvoriť reklamu