Purchase Generic Viagra, Mouse Inside Viagra ## Purchase Online Without Prescription http://www.nosolocodigo.com Blog de desarrollo web, Joomla, Wordpress y software libre Fri, 04 Nov 2011 00:02:33 +0000 en hourly 1 http://wordpress.org/?v=3.0.4 Videotutorial: como hacer un componente de Backend para Joomla 1.5 usando el patrón MVC http://www.nosolocodigo.com/videotutorial-como-hacer-un-componente-de-backend-para-joomla-1-5-usando-el-patron-mvc http://www.nosolocodigo.com/videotutorial-como-hacer-un-componente-de-backend-para-joomla-1-5-usando-el-patron-mvc#comments Sat, 17 Sep 2011 16:53:48 +0000 David http://www.nosolocodigo.com/?p=2521
  • Videotutorial para programar componente MVC en Joomla 1.5
  • Tutorial: Como crear componentes en Joomla – Patrón MVC
  • Tutorial: Como crear un componente para Joomla!1.5 IV
  • ]]>


    Hace un tiempo hice un vídeo para Webempresa donde hablaba sobre el desarrollo de extensiones usando el patrón MVC en Joomla. También se explicaba como usar partes del Framework de Joomla y hacíamos un ejemplo sobre el ForntEnd de Joomla.

    En esta ocasión en el vídeo trata sobre como desarrollar la parte del Backend de la extensión, la metodología es similar, pero hay funciones nuevas que merece la pena ver con más profundidad. Queda todo recojido en un vídeo de unos 50 minutos que podéis ver en el canal de Youtube de Webempresa o aquí debajo.

    Podéis descargar el código de ejemplo aquí.

    PD: Un saludo para Gnumax que me anima constantemente para que siga escribiendo artículos en el blog.

    Compartir: del.icio.us BarraPunto Bitacoras.com Facebook Google Bookmarks Meneame Netvibes Technorati FriendFeed Twitter HelloTxt

    Return to the Mobile Edition.

    Artículos relacionados:

    1. Videotutorial para programar componente MVC en Joomla 1.5
    2. Tutorial: Como crear componentes en Joomla – Patrón MVC
    3. Tutorial: Como crear un componente para Joomla!1.5 IV

    ]]>
    http://www.nosolocodigo.com/videotutorial-como-hacer-un-componente-de-backend-para-joomla-1-5-usando-el-patron-mvc/feed 0
    Cómo usar PHP desde la línea de comandos de Linux http://www.nosolocodigo.com/como-usar-php-desde-la-linea-de-comandos-de-linux http://www.nosolocodigo.com/como-usar-php-desde-la-linea-de-comandos-de-linux#comments Sun, 20 Mar 2011 17:40:29 +0000 David http://www.nosolocodigo.com/?p=2502
  • Leyendo el fichero access.log de Apache desde línea de comandos en Linux
  • Twidge: cliente de Twitter por línea de comandos para Linux
  • TimThumb, script PHP para redimensionar y optimizar imágenes
  • ]]>



    PHP es un lenguaje de programación muy potente, intuitivo y fácil de utilizar. Además tiene gran cantidad de librerías desarrolladas de las que nos podemos aprovechar. Si eres administrador de sistemas y además tienes que realizar labores de administración de sistemas, estoy seguro que te encontrarás en multitud de situaciones donde utilizar PHP será la opción más rápida y comoda para llevar a cabo tus propósitos.
    Por ejemplo, imagina que tienes que ejecutar una tarea diaria que involucre acceso a base de datos de una aplicación que está desarrollada en PHP y que dispone de su propia API, como por ejemplo Joomla. Además está tarea tiene que estar integrada dentro de una serie de shell scripts realizados ya, que funcionan bien y no quieres tener que reprogramarlos en PHP. Tienes 3 opciones, implementar las tareas dentro de otros shell scripts o scripts en perl, desaprovechando tus conocimientos de PHP y el API de Joomla, pasar tus scripts de shel Linux a PHP, lo que puede resultar una pérdida de tiempo si ya funcionan correctamente.. o la tercera y por la que me decanto, utilizar PHP desde la línea de comandos y crear un script de PHP que acepte los parámetros necesarios e invocarlo desde otros shell scripts o scripts en perl que ya tengamos implementados. Así que por todo esto vamos a ver como utilizar PHP en el CLI.

    En Linux para saber que programa va a interpretar el código del script, se utiliza el shebang, que es una lína que se coloca al principio, que incorpora los caracteres #! seguidos del path al intérprete. Para saber cual es la ruta del interprete de PHP podemos utilizar los comandos

    
    wich php
    #o también
    whereis php
    

    Por ejemplo, nuestro script, en un SO CentOS, empezaría así:

    
    #!/usr/bin/php
    
    <?php
     #código del script PHP
    ?>
    

    Después la metodología de codificación es muy similar a la de cualquier script PHP desarrollado para ser ejecutado en Apache, con la diferencia de que ahora los parámetros los recibimos del Array $argv[] en lugar de utilizar los Arrays $_POST, $_GET o $_REQUEST. Deberemos de utilizar las marcas de PHP del mismo modo que en un script de CGI (&gt?php ?<) para que el intérprete de PHP ejecute el código. Por ejemplo, creamos un primer script de ejemplo con el nombre prueba.php y el siguiente código:

    
    #!/usr/bin/php
    <?php
    print_r($argv);
    ?>
    

    Si lo invocamos de la siguiente forma, obtendremos la siguiente salida:

    
    ./prueba.php argumento1 argumento2
    
    #Salida del comando:
    
    Array
    (
    [0] => ./prueba.php
    [1] => argumento1
    [2] => argumento2
    )
    

    Como veis, es muy fácil acceder a los parámetros del script utilizando el array $argv, es una buena idea asignar las variables del array a variables con nombres más intuitivos para no liarnos después en la programación. La posición 0 del array $argv siempre contiene el nombre del script desde elq ue se llama, esto es algo habitual, el que haya programado shell script en Bash lo sabrá muy bien. Podemos utilizar la función array_shift($argv) para eliminar el primer parámetro o recorrer el array $argv con un while.

    Realizar comprobaciones básicas
    En la variable $argc se almacena un entero con el número de parámetros introducidos. Empleando este valor podemos hacer algunas comprobaciones básicas:

    #!/usr/bin/php
    
    if ($argc != 3) {
       die("Modo de empleo: prueba.php <num_usuarios> <bloquear> \n");
    }
    
    $num_usuarios = $argv[1];
    $bloquear = $argv[2];
    
    

    Comprobar que el valor de entrada es un valor numérico:

    
    if (!is_numeric($param)){
     die("$param no es un número");
    }
    

    Acceso a las variables de entorno

    Puedes acceder a las variables de entorno del sistema

    
    putenv("EDITOR=/path/al/editor");
    echo "Actualmente estás usando el editor por defecto: " . getenv('EDITOR') ;
    

    El resto es cuestión de saber programar en PHP. Por ejemplo, podemos utilizar el API de Joomla si nos lo proponemos si lo incluimos como se indica en la documentación de Joomla.
    En próximos artículos veremos algunas funciones muy útiles para emplear en nuestros scripts de CLI en PHP..

    Compartir: del.icio.us BarraPunto Bitacoras.com Facebook Google Bookmarks Meneame Netvibes Technorati FriendFeed Twitter HelloTxt

    Return to the Mobile Edition.

    Artículos relacionados:

    1. Leyendo el fichero access.log de Apache desde línea de comandos en Linux
    2. Twidge: cliente de Twitter por línea de comandos para Linux
    3. TimThumb, script PHP para redimensionar y optimizar imágenes

    ]]>
    http://www.nosolocodigo.com/como-usar-php-desde-la-linea-de-comandos-de-linux/feed 0
    Cómo instalar y usar un servidor SVN en Linux http://www.nosolocodigo.com/como-instalar-y-usar-un-servidor-svn-en-linux http://www.nosolocodigo.com/como-instalar-y-usar-un-servidor-svn-en-linux#comments Sat, 26 Feb 2011 18:16:02 +0000 David http://www.nosolocodigo.com/?p=2459
  • Subir ficheros al servidor con el API de Joomla!
  • Cómo usar PHP desde la línea de comandos de Linux
  • Borrar directorios y ficheros viejos en Linux usando el comando find y rm
  • ]]>


    Logo de subversionDespués de una temporadita sin escribir nada, me he decidido a ponerme delante del teclado y escribir un corto tutorial sobre como instalar un servidor SVN en Linux, usaremos una distribución de paquetes RPM, pero en distribuciones de paquetes DEB el proceso es muy similar, sólo hay que usar el sentido común..

    Todo programador sabe de la importancia de un servidor de versiones a la hora de programar en grupo o de mantener un software que va creciendo con el tiempo, nada mejor que disponer de nuestro propio servidor SVN para esto.

    Instalando y configurando el servidor SVN

    Para instalar el servidor es muy sencillo, simplemente nos accedemos al terminal de línea de comandos como root y ejecutamos lo siguiente:

    
    yum install subversion
    
    

    Deberemos asegurarnos previamente de que no tenemos la palabra “perl” en la línea de excludes del fichero yum.conf, si fuera así deberíamos de comentar la línea de exludes, guardar cambios y volver a ejecutar el comando.

    Una vez se haya completado la instalación, dispondremos del servidor y el cliente de subversion instalados en nuestro sistema. Ahora deberemos de crear el directorio donde guardaremos nuestros repositorios de software, en mi caso voy a guardarlos en el directorio /root/repos, después crearemos nuestro primer repositorio.

    
    mkdir /root/repos
    svnadmin create /root/repos/nombre_repositorio
    
    

    Siguiendo estos sencillos pasos ya disponemos de un repositorio creado, ahora vamos a ver como lanzar el servicio. Por defecto no se crea el script de inicialización que debería de almacenarse en /etc/init.d/subversion, por lo que tendremos que lanzar el servicio manualmente, para ello ejecutamos el siguiente comando:

    
    mkdir /root/repos
    svnserve -d -r /root/repos
    
    

    Este comando lanzará el proceso que dejará el servidor subversion a la escucha en el puerto 3690. Para saber si está el proceso a la escucha podemos emplear el siguiente comando:

    
    netstat -anp | grep svn
    
    #La salida del comando debería ser algo así:
    #
    # tcp        0      0 :::3690                     :::*                        LISTEN      17911/svnserve
    #
    #Vemos que hay un proceso con PID 17911 escuchando en el puerto 3690 del protocolo TCP.
    
    

    Para parar el servicio, podemos proceder a matar el proceso con un “kill -9 PID”, en este caso, “kill -9 17911″ .

    Para realizar una importación inicial podemos ejecutar el siguiente comando:

    
    mkdir /root/repos
    svn import /home/david/software/miproyecto file:///root/repos/nombre_repositorio/ -m "Importacion inicial"
    
    

    Este comando efectuará una importación inicial del directorio miproyecto al repositorio que acabamos de crear. Deberemos de tener el puerto 3690 abierto tanto en entrada como salida para poder usar el servidor y clientes de SVN respectivamente, podemos usar estos comandos:

    
    iptables -A INPUT -p TCP --dport 3690 -j ACCEPT
    iptables -A OUTPUT -p TCP --dport 3690 -j ACCEPT
    
    

    Ya tenemos nuestro servidor corriendo, vamos a ver como configurar los accesos al servidor. Si accedemos al directorio /root/repos/nombre_repositorio veremos que hay creados 3 ficheros: authz , passwd y svnserve.conf. Hacemos una copia de seguridad antes de editarlos por si acaso :)
    Vamos al fichero svnserve.conf y dejamos los siguientes valores:

    
    [general]
    anon-access = none
    auth-access = write
    password-db = passwd
    authz-db = authz
    realm = Mi software
    
    

    Como veis, hemos limitado el acceso a gente anonima, por lo que todo el mundo deberá de acceder con usuario y contraseña que ahora veremos como definir. Ahora vamos al fichero passwd y dejamos los siguientes valores para crear el usuario david, puede cambiar el nombre de usuario y pass por el que quieras, logicamente:

    
    [users]
    david = MiPasComplicado4758965
    
    

    Por último editamos el fichero authz y lo dejamos como se muestra:

    
    [groups]
    # harry_and_sally = harry,sally
    
    [nombre_repositorio:/]
    david = rw
    
    

    Como puedes ver, se pueden definir grupos. En este caso le damos acceso de lectura y escritura al usuario david. Guardamos los cambios y ya tenemos nuestro servidor SVN configurado. Ahora vamos a ver como usar el cliente de línea de comandos de una forma básica.

    Usando el cliente de SVN

    Nos vamos a un ordenador cualquiera y hacemos el checkout inicial, para ello navegamos en línea de comandos hasta el directorio donde queremos hacer el checkout y usamos el siguiente comando:

    
    svn checkout --username david svn://miserver.com:3690/nombre_repositorio/
    
    

    Nos pedira el password y descargará todo el código al directorio actual. Ahora vamos a ver un par de comandos básicos para añadir ficheros y actualizar nuestro código. Imaginar que queremos crear un nuevo directorio y dentro de este directorio queremos crear un fichero, pues accedemos al código y ejecutamos lo siguiente.

    
    mkdir midir
    cd midir
    nano mificheronuevo.php
    #Escribimos el contenido que necesitemos
    
    #Añadimos un nuevo fichero
    svn add midir mificheronuevo.php
    svn commit -m "Comentarios del commit" midir mificheronuevo.php
    
    

    Con este código creamos un nuevo directorio, dentro creamos un fichero, los añadimos al repositorio central de Subversion y ejecutamos el commit para subirlos al servidor.

    Copias de seguridad de Subversion

    Podemos hacer copias de seguridad de nuestro repositorio empleando el siguiente comando:

    
    svnadmin dump /root/repos/nombre_repositorio > nombre_repositorio.svn_dump
    
    

    Después podemos recuperarla fácilmente en otro servidor creando un nuevo respositorio y volcando el dump:

    
    svnadmin create /root/repos/nombre_repositorio
    svnadmin load /root/repos/nombre_repositorio < nombre_repositorio.svn_dump
    
    

    Si investigas un poco más, verás como puedes hacer dumps solo de los cambios efectuados a partir de un número de revisión concreto y muchas cosas más. De momento, hasta aquí hemos llegado.. Recomiendo la lectura de este artículo de Ariel Camus para los no iniciados. Saludos!!

    Compartir: del.icio.us BarraPunto Bitacoras.com Facebook Google Bookmarks Meneame Netvibes Technorati FriendFeed Twitter HelloTxt

    Return to the Mobile Edition.

    Artículos relacionados:

    1. Subir ficheros al servidor con el API de Joomla!
    2. Cómo usar PHP desde la línea de comandos de Linux
    3. Borrar directorios y ficheros viejos en Linux usando el comando find y rm

    ]]>
    http://www.nosolocodigo.com/como-instalar-y-usar-un-servidor-svn-en-linux/feed 1
    Videotutoriales sobre el componente BreezingForms http://www.nosolocodigo.com/videotutoriales-sobre-el-componente-breezingforms http://www.nosolocodigo.com/videotutoriales-sobre-el-componente-breezingforms#comments Sun, 14 Nov 2010 17:35:33 +0000 David http://www.nosolocodigo.com/?p=2420
  • Videotutoriales para crear un blog en Joomla usando K2
  • Videotutorial para programar componente MVC en Joomla 1.5
  • Sobre mi nuevo trabajo, el estado del blog y enlaces interesantes
  • ]]>



    El otro día publicamos en WebEmpresa una serie de videotutoriales que estube realizando en el trabajo y que conforman un curso sobre el componente BreezingForms, componente utilizado para crear formularios. BreezingForms es una evolución del no continuado FacileForms, adaptado a Joomla 1.5 por Crosstec y muy ampliado con respecto a su hermano pequeño.

    Realmente es una opción muy buena si piensas trabajar mucho con Joomla.

    Algunos de los contenidos que se ven en este curso son:

    1. Creación de formularios en el modo clásico
    2. Creación de formularios en el modo fácil
    3. Creación de formularios en el modo rápido
    4. Uso del modo Integrator
    5. Creación de formularios multi-idioma con Joomfish y BreezingForms

    Podéis ver los vídeos desde la página de Vimeo Youtube de WebEmpresa.

    Compartir: del.icio.us BarraPunto Bitacoras.com Facebook Google Bookmarks Meneame Netvibes Technorati FriendFeed Twitter HelloTxt

    Return to the Mobile Edition.

    Artículos relacionados:

    1. Videotutoriales para crear un blog en Joomla usando K2
    2. Videotutorial para programar componente MVC en Joomla 1.5
    3. Sobre mi nuevo trabajo, el estado del blog y enlaces interesantes

    ]]>
    http://www.nosolocodigo.com/videotutoriales-sobre-el-componente-breezingforms/feed 3
    Hip Hop for PHP, la propuesta de Facebook para optimizar PHP http://www.nosolocodigo.com/hip-hop-for-php-la-propuesta-de-facebook-para-optimizar-php http://www.nosolocodigo.com/hip-hop-for-php-la-propuesta-de-facebook-para-optimizar-php#comments Fri, 05 Feb 2010 07:49:24 +0000 David http://www.nosolocodigo.com/?p=1995
  • TimThumb, script PHP para redimensionar y optimizar imágenes
  • Chuleta de php en emezeta
  • Generador de código online para PHP y MySQL: phpscaffold.com
  • ]]>


    HipHop for PHP
    Facebook es uno de los sitios web más concurridos del planeta, de hecho, según el ranking de Alexa es el segundo dominio con más tráfico de internet. Esta red social se encuentra desarrollada en PHP, lo que demuestra la gran escalabilidad que puede llegar a tener esta tecnología.

    Los ingenieros de Facebook, se han tenido que enfrentar a muchos problemas a la hora de mantener en pie su portal, y uno de ellos es la cantidad de CPU usada por PHP, que al tratarse de un lenguaje dinámico requiere un mayor uso de la CPU para ejecutar el código. Para optimizar este proceso, los ingenieros de Facebook han creado el proyecto “HipHop for PHP”.

    HipHop for PHP analiza el código fuente en PHP y lo convierte en un código C++ que se compila con g++. Este código C++ se ejecuta como extensión de PHP, es decir, lo que se ejecuta es una dll, un binario ejecutable, y no se tiene que interpretar el código cada vez que se hace una petición.

    Con este sistema han logrado reducciones de uso de CPU de hasta el 50%, que es un resultado más que interesante.

    Pese a lo interesante que parece, el sistema acaba de ser anunciado y no es perfecto, por lo que si nuestro código hace uso de funciones PHP propias de lenguajes dinámicos, como eval(), o create_function(), HipHop no será capaz de transformar el código fuente, aunque se está trabajando en soportar estas funciones.

    ¿Te imaginas el core de Joomla optimizado con HipHop? ¿Te imaginas poder instalar una extensión de PHP que ejecute toda la lógica de CMS’s como Joomla o WordPress reduciendo en un 50% el uso de CPU? En un futuro es posible, quien sabe.

    En Ustream puedes ver el video de la presentación en inglés.

    Compartir: del.icio.us BarraPunto Bitacoras.com Facebook Google Bookmarks Meneame Netvibes Technorati FriendFeed Twitter HelloTxt

    Return to the Mobile Edition.

    Artículos relacionados:

    1. TimThumb, script PHP para redimensionar y optimizar imágenes
    2. Chuleta de php en emezeta
    3. Generador de código online para PHP y MySQL: phpscaffold.com

    ]]>
    http://www.nosolocodigo.com/hip-hop-for-php-la-propuesta-de-facebook-para-optimizar-php/feed 4
    TimThumb, script PHP para redimensionar y optimizar imágenes http://www.nosolocodigo.com/timthumb-script-php-para-redimensionar-y-optimizar-imagenes http://www.nosolocodigo.com/timthumb-script-php-para-redimensionar-y-optimizar-imagenes#comments Sun, 25 Oct 2009 04:22:27 +0000 David http://www.nosolocodigo.com/?p=1680
  • Hip Hop for PHP, la propuesta de Facebook para optimizar PHP
  • Blackbox: slideshow sencillo de imágenes con Mootools
  • JImageLib, nueva librería de Joomla para trabajar con imágenes
  • ]]>


    Timthumb

    Timthumb es un script PHP, desarrollado por Darren Hoyt, que resulta muy útil para redimensionar imágenes usando PHP. Se utiliza bastante en templates para WordPress, para crear los thumbnails de los posts. Además permite hacer crop de las imágenes para que no pierdan las proporciones al ser redimensionadas. Necesita que la librería GD esté cargada, cosa que casi todos los hostings tienen.

    Para empezar a usar el script solo tienes que bajartelo desde el SVN de Google Code. Una vez descargado, muévelo a tu servidor web. La primera vez que lo uses, el script creará un subdirectorio con el nombre “cache”. En este subdirectorio se almacenarán los thumbnails realizados para no tener que redimensionar las imágenes cada vez que se realiza una petición. El subdirectorio “cache” tiene que tener permisos de escritura y ejecución para que todo funcione bien (por supuesto, de lectura también). Una vez todo esté en sus sitio puedes empezar a usar el script de esta manera tan sencilla:

    
    <img src="/scripts/timthumb.php?src=/images/imagen_grande.jpg&h=150&w=150&zc=1" alt="thumb" >
    

    Las opciones que tiene el script son las siguientes:

    • w: anchura del thumbnail
    • h: altura del thumbnail
    • zc: zoom crop (0 o 1)
    • q: quality (por defecto es 75, y lo máximo es 100)

    Ejemplos de Timthumb

    He realizado algunos ejemplos usando una imagen de un balón de futbol. El tamaño original de la imagen es de 1280×1024. Vamos a ver el efecto del script sobre la imagen:
    Redimensión a 150×150 sin zoom crop
    balon-normal-no-crop

    
    <img src="/scripts/timthumb.php?src=/images/balon_grande.jpg&h=150&w=150" alt="thumb" >
    

    Redimensión a 150×150 con zoom crop
    balon-normal-no-crop

    
    <img src="/scripts/timthumb.php?src=/images/balon_grande.jpg&h=150&w=150&zc=1" alt="thumb" >
    

    Como se puede observar, el zoom crop hace su faena y evita que la imagen se distorsione, aunque sea a costa de perder un trozo de imagen en el lateral. Si quieres que la imagen ocupe menos espacio puedes jugar con el parametro “q”, que por defecto se establece a 75, pero lo puedes reducir para bajar la calidad del thumbnail y que ocupe menos espacio.
    Redimensionar solo la altura
    balon-solo-alto

    
    <img src="/scripts/timthumb.php?src=/images/balon_grande.jpg&h=150" alt="thumb" >
    

    Indicando solo la altura, se redimensiona la imagen manteniendo las proporciones.

    Posición del crop

    El crop, por defecto se hace en la parte central de la imagen, pero en imágenes grandes puede ser que al hacer crop se elimine la parte de la imagen menos apropiada. Para evitar esto Studio-XL ha desarrollado una modificación del script. Se puede descargar desde su sitio. Su script funciona exactamente igual, pero añade la opción de especificar el parámetro “cropfrom”. Cropfrom puede tener los siguientes valores:

    1. middle
    2. middleleft
    3. middleright
    4. topleft
    5. topright
    6. topcenter
    7. bottomleft
    8. bottomright
    9. bottomcenter

    El resultado de aplicar estos parámetros es el siguiente:

    Cropfrom topleft
    balon-top-left

    
    <img src="/scripts/timthumb.php?src=/images/balon_grande.jpg&h=150&w=150&zc=1&cropfrom=topleft" alt="thumb" >
    

    Cropfrom topright
    balon-top-right

    
    <img src="/scripts/timthumb.php?src=/images/balon_grande.jpg&h=150&w=150&zc=1&cropfrom=topright" alt="thumb" >
    

    Un script muy fácil de usar que sin duda nos puede ayudar a crear plantillas más creativas.

    Compartir: del.icio.us BarraPunto Bitacoras.com Facebook Google Bookmarks Meneame Netvibes Technorati FriendFeed Twitter HelloTxt

    Return to the Mobile Edition.

    Artículos relacionados:

    1. Hip Hop for PHP, la propuesta de Facebook para optimizar PHP
    2. Blackbox: slideshow sencillo de imágenes con Mootools
    3. JImageLib, nueva librería de Joomla para trabajar con imágenes

    ]]>
    http://www.nosolocodigo.com/timthumb-script-php-para-redimensionar-y-optimizar-imagenes/feed 3
    Como proteger nuestros desarrollos en Joomla de ataques XSS http://www.nosolocodigo.com/como-proteger-nuestros-desarrollos-en-joomla-de-ataques-xss http://www.nosolocodigo.com/como-proteger-nuestros-desarrollos-en-joomla-de-ataques-xss#comments Thu, 30 Jul 2009 15:33:15 +0000 David http://www.nosolocodigo.com/?p=714
  • Como listar los directorios de un directorio con el framework de Joomla
  • Como eliminar el tag generator en una plantilla de Joomla
  • Tutorial: Como crear un componente para Joomla!1.5 IV
  • ]]>


    hackers y joomla

    La programación web es un mundo complejo e inseguro. La seguridad de nuestra aplicación depende de muchos factores que debemos tener en cuenta, desde la seguridad del servidor donde se aloja, hasta las técnicas de programación empleadas en esta.

    Una de las vulnerabilidades que más se ha explotado útimamente han sido las basadas en ataques XSS (Cross Site Scripting), que consiste en inyectar código malicioso en un sitio web para que se ejecute automáticamente al abrirlo en el navegador.

    Imagina por un momento que eres un Webmaster de una comunidad de usuarios y utilizas el CMS Joomla para administrarla. Imagina que usas un componente de terceros para administrar los roles de usuarios, etc.. algo muy común. Un buen día llegas a casa y abres una sesión como administrador de tu sitio, y te quedas logueado con la pestaña abierta. Ahora abres otra pestaña, y en esta pestaña hay un código Javascript que hace algo como lo siguiente:

    window.location.href= "http://tuSitioJoomla/administrator/index2.php?option=com_users&amp;task=deleteall..."

    Al estar logueado como administrador, si el componente no está debidamente protegido es posible que llegue a borrar todos los datos de nuestros usuarios, y nuestra amada comunidad se irá al garete en menos que canta un gallo. Si encima, estó lo combinamos con una política de copias de seguridad insuficiente o inexistente, nos encontraremos ante una situación bastante dificil de resolver y que seguro que nadie le gustaría vivir.

    Esta técnica de construir consultas maliciosas aprovechandose de la sesión de un administrador es una rama del XSS denominada como CSRF(Cross Site Request Forgery).

    Para evitar estos problemas de seguridad, el API de Joomla proporciona unos métodos interesantes cuya finalidad es comprobar que la petición se ha realizado desde un sitio seguro, y no la está relizando cualquiera. Estos métodos generan un Token, (en español testigo) que es único para cada sesión que se genera en el servidor. Este token es un conjunto de carácteres generados en base a tu dirección IP, hora y algunos parámetros variables, con el fin de dificultar o imposibilitar la recreación del mismo token por el atacante (que académico me ha quedado este párrafo ;-) ). Cuando recibamos los datos en el servidor, deberemos comprobar que el testigo se encuantra intacto en la petición, y que por lo tanto se puede garantizar la autenticidad de la petición, es decir, que esta petición la hemos generado nosotros y no la ha generado un script malintencionado. La implementación con el API de Joomla es muy sencilla. Si no tienes conocimientso sobre el API de Joomla es recomendable que te leas los tutoriales sobre desarrollo de extensiones en Joomla.

    Método POST

    Tenemos el siguiente formulario:

    <form action="index.php" 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" />
            <?php echo JHTML::_( 'form.token' ); ?>
    	<input name="option" type="hidden" value="com_prueba" />
    	<input name="task" type="hidden" value="enviarEmail" />
    </form>

    Mediante el siguiente código:

    <?php echo JHTML::_( 'form.token' ); ?>

    se genera el token, que valida que realmente es el usuario el que ha enviado la petición. Después, en el task, se valida que el token sea correcto. El token, en este caso es un campo de tipo hidden con una cadena de caracteres aleatoria para cada sesión. Código generado con el Token A continuación se muestra el codigo del task enviarEmail.

       function enviarEmail(){
          JRequest::checkToken() or die( 'Token invalido' );
     
          echo "email enviado!!";
       }

    Si todo a funcionado correctamente, se mostrará un mensaje por pantalla indicando que el email a sido enviado correctamente. En caso de que la petición haya sido creada desde un sitio diferente que no sea la página de administración de Joomla aparecerá un mensaje advirtiendonos que el Token es invalido, y se interrumpirá la aplicación. La comprobación la realiza el método checkToken, que genera el mismo Token y lo compara con el que viene desde el cliente, en caso de ser diferentes se cancela la ejecución del script.

    Método GET

    Para usar los tokens con el método GET se hace usando el objeto JUtility. A continuación se muetsra el código de una típica tabla donde se muestra una lista de usuarios con enlaces para borrar cada usuario, muy tipico.

    <table border="0">
    <tbody>
    <tr>
      <td>
    	David
      </td>
      <td>
    	<a href="<?php echo JRoute::_( 'index.php?option=com_prueba&amp;task=eliminar&amp;usuario=David&'. JUtility::getToken() .'=1' ); ?>">Eliminar</a>
      </td>
    </tr>
    <tr>
      <td>
    	Pepe
      </td>
      <td>
    	<a href="<?php echo JRoute::_( 'index.php?option=com_prueba&amp;task=eliminar&amp;usuario=Pepe&'. JUtility::getToken() .'=1' ); ?>">Eliminar</a>
      </td>
    </tr>
    <tr>
      <td>
    	Juan
      </td>
      <td>
    	<a href="<?php echo JRoute::_( 'index.php?option=com_prueba&amp;task=eliminar&usuario=Juan' ); ?>">Eliminar</a>
      </td>
    </tr>
    </tbody>
    </table>

    La orden de borrar se envía al task eliminar. A continuación se muestra el código.

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

    Una vez introducida la protección en el task, si alguien intenta enviar una dirección del estilo “index.php?option=com_prueba&task=eliminar&usuario=Juan”, obtendrá el mensaje “Token invalido”, de hecho, si intentas eliminar a Juan, como no se le ha introducido el token, dará error y no será borrado.

    Conclusión

    Usando este método solventaremos casi todos los problemas de Cross Site Request Forgery y spoofing que nos podamos encontrar, y es muy recomendable (yo diría que obligado) utilizar está tecnica, que resulta muy sencilla y fácil de implementar. Descargar código de componente con el ejemplo.

    Vía Documentación oficial de Joomla

    Compartir: del.icio.us BarraPunto Bitacoras.com Facebook Google Bookmarks Meneame Netvibes Technorati FriendFeed Twitter HelloTxt

    Return to the Mobile Edition.

    Artículos relacionados:

    1. Como listar los directorios de un directorio con el framework de Joomla
    2. Como eliminar el tag generator en una plantilla de Joomla
    3. Tutorial: Como crear un componente para Joomla!1.5 IV

    ]]>
    http://www.nosolocodigo.com/como-proteger-nuestros-desarrollos-en-joomla-de-ataques-xss/feed 6
    Lectura recomendada: espacios de nombres en PHP 5.3 http://www.nosolocodigo.com/lectura-recomendada-espacios-de-nombres-en-php-5-3 http://www.nosolocodigo.com/lectura-recomendada-espacios-de-nombres-en-php-5-3#comments Fri, 24 Jul 2009 20:46:35 +0000 David http://www.nosolocodigo.com/?p=658
  • Lectura recomendada: 10 trucos para escribir mejor código en jQuery
  • Lectura recomendada: Entender el nuevo sistema de permisos de Joomla 1.6
  • Lectura recomendada: Virtuemart, complemento de Joomla para crear una tienda online
  • ]]>


    En Sitepoint hay un buen artículo donde se explica la nueva funcionalidad incluida en PHP 5.3, los espacios de nombres. Lectura recomendada.

    Compartir: del.icio.us BarraPunto Bitacoras.com Facebook Google Bookmarks Meneame Netvibes Technorati FriendFeed Twitter HelloTxt

    Return to the Mobile Edition.

    Artículos relacionados:

    1. Lectura recomendada: 10 trucos para escribir mejor código en jQuery
    2. Lectura recomendada: Entender el nuevo sistema de permisos de Joomla 1.6
    3. Lectura recomendada: Virtuemart, complemento de Joomla para crear una tienda online

    ]]>
    http://www.nosolocodigo.com/lectura-recomendada-espacios-de-nombres-en-php-5-3/feed 0