PDA

Ver la Versión Completa Con Imagenes : ¿Cómo Evitar ataques SQL injection en Joomla?


Ayudante De Santa
06-11-2015, 22:19:08
Los mejores licores
Sinclair
26-10-2010, 04:01:08
Cada vez que creamos un componente para Joomla estamos aportando a que nuestro desarrollo sea la entrada a un atacante, pero obviamente no todo está perdido y en este post veremos unas pequeñas técnicas para disminuir los riesgos de seguridad.
Forzar los tipos de datos con el API de Joomla

Esta técnica es básicamente comprobar que los tipos de datos enviados si sean los que pedimos. ¿Cómo?, pues si por ejemplo el dato enviado fue un número de teléfono obviamente debe llevar solo números es necesario entonces comprobar que en realidad sean números.



$ sql = 'UPDATE #__mitabla SET `tel` = ' . (int) $ tel;
Con (int) estamos forzando el tipo de dato a un entero.
Si estamos haciendo la validación con una fecha entonces usaremos JDate que es la herramienta que nos brinda Joomla para manuipular fechas:



$ fecha =& JFactory::getDate($ mifecha);
$ sql = 'UPDATE #__mitabla SET `date` = ' . $ db->quote( ->toMySQL(), false);
Escapando las Cadenas (Strings)

Para escapar cadenas en Joomla es muy sencillo.



$ sql = 'UPDATE #__mytable SET `string` = ' . $ db->quote( $ db->getEscaped( $ string ), false );
Si estás utilizando el comando LIKE, puedes tener una vulnerabilidad DOS por no “escapar” los carácteres especiales % y _.
Joomla te facilita esta operación. ->getEscaped puede tener un segundo parámetro que los “escapará” por ti.



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


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

Hay métodos parecidos a JRequest que fuerzan las variables a comportarse como queremos.
Integers:



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



$ float = JRequest::getFloat( $ name, $ default );
Boolean (verdadero/falso)::

$ bool = JRequest::getBool( $ name, );
Words (palabras, sólo letras y _):

$ word = JRequest::getWord( $ name, $ default );Commands (Alfanuméricos, – y _ ):

$ cmd = JRequest::getCMD( $ name, $ default );
Texto libre de HTML::
$ string = JRequest::getString( $ name, $ default );



(Recuerden que todos los signos $ se deben poner pegados de la respectiva palabra que le sigue, yo los ubico despegados para que el código no se me desaparezca en el campo de texto.)

Ayudante De Santa
06-11-2015, 22:19:08
Los mejores licores
-El Mara-
26-10-2010, 06:12:05
huyyy esto si me sirve gracias ariel

rondamoncito
26-11-2010, 00:45:53
a mi tambien me sirve mucho, aunque no tenga no culo de idea de lo que escribo jajaja gracias (y)

ARICARRARO
07-12-2010, 11:57:29
Buen post. Es muy útil para quienes apenas usamos Joomla.

o_0

oswalgogra
12-12-2010, 14:50:30
Que bueno que compartas esta información con la comunidad.

También hay documentación para administradores, programadores y diseñadores en la página oficial de la documentación de Joomla!:

http://docs.joomla.org/

Yo he aprendido muchas cosas leyendo aquí:

http://docs.joomla.org/Developers

Éxitos y hasta pronto! :SmokeScreen_emotico