Hosting Joomla, formación, soporte técnico Joomla, diseño web Joomla

Acceso Panel de Control Clientes y Compra de Productos

Haz tus extensiones de Joomla más seguras
Joomla Blog - Formacion Joomla
Jueves, 18 de Marzo de 2010 19:18

Seguridad en JoomlaLa seguridad es un factor importantísimo a la hora de realizar un desarrollo web. Joomla es una excelente plataforma donde realizar estos desarrollos, que nos permitirá reutilizar nuestro código y nuestras extensiones en cualquier sitio, y que además nos ofrece una gran libertad para realizar lo que necesitemos.

Pero hay que tener cuidado, las aplicaciones web suelen estar abiertas a todo el mundo, lo que significa que estamos potencialmente en el punto de mira de muchos ojos maliciosos que pueden intentar romper nuestra seguridad para acceder a nuestro sistema y hacerse con nuestra información tan preciada.


Afortunadamente , Joomla viene al rescate con un API repleta de métodos y funciones que nos harán la vida más fácil a los programadores de aplicaciones en Joomla.

Inyección SQL

Uno de los problemas más comunes y catastróficos es el de las inyecciones SQL. Una inyección SQL puede acabar con toda la información de tu sitio web y, por consiguiente, con todo tu sitio. Para tratar de evitarlas hay que procesar los datos que vienen desde el exterior con los métodos apropiados del API de Joomla. A continuación se enumeran algunas de estas funciones que incorpora el API de Joomla.

  • $db->quote
  • $db->nameQuote
  • $db->getEscaped
  • JRequest
  • JFilterInput

Vamos a ver cómo usarlas.

 


$db =& JFactory::getDBO();
$tabla = $db->nameQuote('nombreDeTabla');
$columna = $db->nameQuote('nombreDeColumna');
$literal = "<img src="/’imagen.jpg’" alt="’imagen’" />";
$sql = "SELECT * FROM $tabla "
. "WHERE $columna " . ' = '
. $db->Quote($literal);

$db->setQuery($sql);
$db->query();

El método getDBO() devuelve el objeto JDatabase. El método nameQuote entrecomilla los identificadores de tabla y de columna respectivamente. Mientras que el método Quote entrecomilla el literal. El resultado final de las variables es el siguiente:

$tabla

'nombreDeTabla'

$columna

'nombreDeColumna'

$literal

'<img src="/src" alt="imagen" />'

También existe el método getEscaped, que devuelve el string escapado, pero no entrecomillado. El método quote devuelve el string escapado y entrecomillado.

De esta forma evitaremos que fallen algunas consultas donde se usan palabras reservadas de MySQL, muy común y muy difícil de detectar y, además evitaremos que algunos usuarios maliciosos intenten modificar nuestra consulta SQL jugando con las variables de entrada.

Filtrando valores numéricos

Para limpiar valores numéricos podemos usar JRequest de la siguiente manera:

 


// Enteros
$safeInt = JRequest::getInt('int');
$safeInt = JRequest::getVar('int', 0, 'DEFAULT', 'INT');
$safeInt = JRequest::getVar('int', 0, 'DEFAULT', 'INTEGER');

// Floats
$safeFlt = JRequest::getFloat('float');
$safeFlt = JRequest::getVar('float', 0, 'DEFAULT', 'FLOAT');
$safeFlt = JRequest::getVar('float', 0, 'DEFAULT', 'DOUBLE');

Una vez hecho esto ya podemos usar los valores numéricos para construir nuestra sentencia SQL sin temor de que alguien modifique intencionalmente nuestra base de datos.
Estos son algunos de los métodos de los que nos provee Joomla para “securizar” la entrada de datos, consulta la documentación oficial si quieres indagar más.

En general, el objeto JRequest es recomendable usarlo adecuadamente siempre que obtenemos datos de los arrays de entrada, esto evitará posibles disgustos con los "chicos malos".

Evitando el Cross-Site Request Forgery (CSRF)

El CSRF es una debilidad del software muy común y muy poco tomada en cuenta por desarrolladores noveles.
En el típico escenario CRUD (Create Read Update y Delete), imagina que para borrar determinado dato debemos de acceder a la siguiente URL:

index.php?option=com_micomponente&task=delete&id[]=4

Una llamada a la anterior URL borraría el elemento con ID 4 de mi componente. Imagina que ahora alguien toma control de tu ordenador y se dedica a enviar URLs de este tipo con tu ordenador sin que te enteres, o alguien coloca una URL maliciosa en un foro con el "anchor text" pulsa aquí, pero que realmente está apuntando a la dirección anterior. En definidas cuentas, no podemos confiar en que un usuario logueado es un usuario confiable, porque no siempre va a ser el usuario en sí quien realice estas peticiones HTTP. Una posible solución a esto, y muy recomendable, es bajar el tiempo de sesión para que expire en un lapso de tiempo cuanto más pequeño mejor y, además, evitar navegar por internet mientras uno está logueado en el sistema Joomla.
Pero esto es sólo una recomendación que minimiza las posibilidades de ataque, no ataja el problema de raíz. Para solucionar esto debemos usar el Token que crea Joomla, "testigo" si lo traducimos al español.
La forma de uso es muy sencilla y consiste en, como su nombre indica, pasarse el testigo de una página a otra.
Cuando creamos un formulario deberemos incluir una llamada a JHTML::_( 'form.token'). Esto crea un campo de tipo hidden en el formulario, que contendrá un identificador único que caducará en cada petición. Luego desde el task tendremos que comprobar que el token es correcto, esto lo haremos con el método JRequest::checkToken().

A continuación un ejemplo:

<form method="post">

Nombre:

<input name="nombre" type="text" />

Email destino:

<input name="email" type="text" />

Cuerpo:

<input name="cuerpo" type="text" />

<input type="submit" value="Enviar Email" />



<input name="option" type="hidden" value="com_prueba" />

<input name="task" type="hidden" value="enviarEmail" />

</form>


Task que recoge el formulario

function enviarEmail(){
JRequest::checkToken() or die( 'Token invalido' );

echo "email enviado!!";
}


Si usamos el método GET, el código para crear el token es el siguiente:


<a href="/<?php echo JRoute::_( 'index.php?option=com_prueba&task=eliminar&usuario=David&'. JUtility::getToken() .'=1' ); ?>">Eliminar</>

function eliminar(){
JRequest::checkToken( 'get' ) or die( 'Token invalido' );
echo "Usuario eliminado!!";
}



De esta forma evitaremos que alguien se aproveche de nuestra sesión para enviar peticiones HTTP maliciosas.
Estas son algunas recomendaciones, hay más temas a tratar, nunca des por sentado que tu web es segura solamente aplicando estas recetas.

Te dejamos unas cuantas direcciones de interés para que les eches un vistazo.

Share
Trackback(0)
Comentarios (0)add comment

Escribir comentario

busy
 

¡Suscríbete a nuestro Boletín!


noticias Joomla
Información actualizada sobre Joomla y Webempresa
Code:

Nuestro Equipo :

GerardGerard Martinez
Director
Comercial
MaiteMaite Mercader
Responsable
Joomlafácil
PabloPablo Velasco
Analista
Programador
DavidDavid Noguera
Analista
Programador
LucasLucas Guardino
Analista
Programador
NuriaNuria Durán
Diseñadora Web - Creativa
JorgeJorge Sala
Diseñador Web - Formador
YolandaYolanda Leiva
Servicio
Técnico

Ejemplo Tienda Virtual

Último Joomla Realizado

Noticia Destacada

Como insertar el mapa de Google Maps en Joomla!

En el vídeo que mostramos en este artículo explicamos como dar de alta un negocio en Google Maps y luego insertar el mapa en Joomla!. La realización de ambos pasos es importante para sitios webs que son un negocio o similares, ya que cumplen un doble objetivo:

- Alta en Google Maps, con lo que conseguimos un enlace al sitio web creado y nos ayudará a nivel de resultados en los buscadores.

- Inserción del mapa en el sitio web, dotamos al mismo de la interactividad propia que nos ofrece la herramienta de Google Maps y permite de una manera rápida tener un mapa interactivo, y no usar mapas que son una simple imagen o realizados en flash que no permiten una fácil modificación por el administrador de la página a menos que domine las herramientas de Retoque Fotográfico o de creación de archivos Flash.

Leer más...

Participación en Joomla.org

joomla developer gold

Búsqueda Google en Webempresa

Servicios que ofrecemos para Joomla :
Hosting JoomlaHosting Joomla :
Servidores
100% preparados
para Joomla
Soporte JoomlaSoporte :
Técnicos cualificados en Joomla a tu servicio.
Formación JoomlaCursos online:
Formación Joomla personalizada
Consúltanos
Desarrollo JoomlaDiseño Web:
Servicio Profesional de Diseño Web Joomla
¿Información comercial?