PDA

Zobacz pełną wersję : Znaki specjalne i zapis do bazy przy (lub nie) pomocy JTable.



GrzesiekP
24-11-2010, 16:29
Witam!
Pierwsze pytanie - zaplecze.
Posługuję się klasą JTable zapisu/aktualizacji rekordów.
Wprowadzam jakiś tekst, np: "Cos tam 's ASD>@#$ <ads" - niestety, ale po "<" ucina resztę. Jak temu zaradzić?

Kod w kontrolerze:

function save() {
$option = JRequest::getCmd('option');
$this->setRedirect('index.php?option=' . $option . '&view=songs');
$post = JRequest::get('post');
JTable::addIncludePath(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_tophits' . DS . 'tables');
$row = & JTable::getInstance('songs', 'Table');

if (!$row->bind($post)) {
return JError::raiseWarning(500, $row->getError());
}

if (!$row->store()) {
return JError::raiseWarning(500, $row->getError());
}
$this->setMessage(JText::_('ALERT_SAVED_SUCCESS'));
}


I to samo pytanie od strony frontendu - użytkownik ma formularz, przesyłam formularz i w kontrolerze mam:


$row->song = JRequest::getVar('title','0','post','string',JREQU EST_ALLORAW);

Jak tutaj mam sobie poradzić ze znakami specjalnymi? Tak, by nie być zagrożonym ataki sql injection?

I jeszcze jedno pytanie - czy funkcja getescaped wystarczy, abym się czuł bezpiecznie, podczas wykonywań zapytań z "WHERE"? Chodzi oczywiście o SQL injection i umożliwienie użytkownikowi kilku funkcji do filtrowania, etc.

Dziękuję za pomoc :)

Craft
24-11-2010, 18:10
http://api.joomla.org/Joomla-Framework/Environment/_joomla---environment---request.php.html
http://docs.joomla.org/API15:JRequest/getVar

GrzesiekP
24-11-2010, 19:03
Faktycznie trochę nie doczytałem i zapomniałem o możliwości JREQUEST_ALLORAW/JREQUEST_ALLOWHTML

Odnośnie zapytań, to chyba nameQuote i quote
http://docs.joomla.org/How_to_use_the_database_classes_in_your_script#Pre paring_the_query
wystarczą?

Aha - rozumiem, że poprzez stosowanie JTable (store/bind) nie muszę się obawiać SQL Injection? Czy może jednak tak?

Jola
24-11-2010, 21:54
Witam,
od razu się przyznam, że nie analizowałam działania tych funkcji.
Chciałam się tylko wypowiedzieć na temat zabezpieczenia przed atakiem SQL Injection we własnym komponencie.
Atak taki bazuje na przekazaniu w zmiennej GET parametru lub całej komendy sql do zapytania sql użytego w kodzie.
Jest to łatwiejsze jeśli kod rozszerzenia jest znany.
Myślę, że niezłym pomysłem jest odfiltrowanie wszystkich zmiennych typu GET pod kątem wystąpienia komend sql (select, insert, delete, truncate, update, drop)

GrzesiekP
24-11-2010, 23:10
Czyli, aby bezpiecznie pobrać INTa z adresu url, najlepiej by było:


$id= JRequest::getVar('id', '0', 'get','INT');

Jeśli się mylę, proszę popraw mnie :)

Jola
24-11-2010, 23:23
Wg klasy JRequest

$id= JRequest::getVar('id', '0', 'get','int');lub można użyć robiącej to samo:

$id= JRequest::getInt('id', '0', 'get');
libraries/joomla/environment/request.php