Sprečavanje napada SQL inekcijom

 

Napad SQL inekcijom je jedan od najraširenijih napada u zadnje vrijeme i to ne samo u Joomla CMS-u, nego i u mnogim drugim CMS-ovima. Ova tehnika napada je jako stara, čak starija i od Joomla-e. Postoje razni načini zaštite od SQL inekcija od koji su neki i automatizovani, ali oni ne garantuju 100% zaštitu i sigurnost. Većinom se mogućnost napada SQL inekcijom javlja u komponentama i modulima razvijenim od trećih lica, ali i u oficijalnim Joomla komponentama i modulima. 

Kako se zaštiti od ovoga saznajte u nastavku teksta.

 

 

Spisak svih komponenti i modula sa mogućnost napada SQL inekcijom, kao i sa trenutnim statusom otklanjanja istog možete naći na:

http://docs.joomla.org/Vulnerable_Extensions_List.

U nastavku teksta možete da vidite nekoliko analiza i savjeta kako ručno, u kodu, ispraviti mogućnost SQL inekcije i zaštiti se.

 

Forsiraj korištenje tipa varijable koji je potreban

Ukoliko očekuješ varijablu tipa Integer, forsiraj u kodu da to i bude.  

   $sql = 'UPDATE #__mytable SET `id` = ' . (int) $int;

Ukoliko želiš da ubaciš datum, koristi JDate koji vraća validan mysql format datuma ...

   $date =& JFactory::getDate($mydate);
   $sql = 'UPDATE #__mytable SET `date` = ' . $db->quote( $date->toMySQL(), false);

 

UVIJEK koristi 'Escape' za varijable

Korištenjem Escape funkcije postižeš dodatnu sigurnost vrijednosti unešenih od strane korisnika:

   $sql = 'UPDATE #__mytable SET `string` = ' . $db->quote( $db->getEscaped( $string ), false );

Ovdje se zapravo koriste 2 funkcije. Jedna koja je Escape i druga koja dodaje navode ( ' ). Drugi parametar za $db je postavljen na 'false'. Ukoliko ostane tako ili je postavljen na 'true' onda se on sam izbriše i postaje:

   $sql = 'UPDATE #__mytable SET `string` = ' . $db->quote( $string );

 

Sprečavanje DOS napada

U WHERE upitu, ukloliko koristiš LIKE komandu, moguće je da ostane otvorena mogućnost DOS napada jer nije korištena Escape funkcija za specijalne znakove '%' i '_'. Joomla pruža mogućnost da uradi to automatski. $db->getEscaped može uzeti drugi parametar i isključiti te specijalne znakove automatski. U slučaju da koristiš LIKE komandu ovaj proces nije automatizovan i to moraš uraditi sam na sljedeći način:

     $sql = 'UPDATE #__mytable SET .... WHERE `string` LIKE '.
     $db->quote( $db->getEscaped( $string, true ), false );


Sprečavanje XSS napada

Većina programera povlači podatke koristeći JRequest funkciju, iako postoji mnogo drugih metoda i načina da se to urradi bolje i sigurnije. Neko od njih su date u daljnjem tekstu:

Za Integere:

$int = JRequest::getInt( $name, $default ); 

Za Floatse (decimalne):

$float = JRequest::getFloat( $name, $default ); 

Za Boolean vrijednosti (true/false):

$bool = JRequest::getBool( $name, $default ); 

Za "riječi" (moguće samo za ALFA znakove i  _  specijalni znak)

$word = JRequest::getWord( $name, $default ); 

ZA "komande" (moguće za alfa znakove, brojeve, te specijalne znakove . - i _ )

$cmd = JRequest::getCMD( $name, $default );

Za NON-HTML tekst

$string = JRequest::getString( $name, $default ); 
  

Do sljedećeg puta ...

(preuzeto sa http://developer.joomla.org/security/articles-tutorials/258-preventing-sql-injections.html)

Ko je na portalu?

Ko je na portalu: 16 gostiju i nema prijavljenih članova

Statistika portala

Posjetioci
1922
Članci
469
Broj pregleda članaka
3420541

Socijala