Etiqueta : cms

WordPress o Drupal, ¿qué CMS debería utilizar?

Por Marta Oliver
Developer at OpenSistemas

Durante mi trabajo en OpenSistemas he podido llevar a cabo proyectos basados en distintos CMS, entre los cuales destacaría sobre todo WordPress y Drupal. Basándome en mi experiencia personal, en este post me gustaría comparar ambos de forma general de cara a facilitar la tarea de elegir qué gestor de contenidos deberíamos utilizar para cada caso concreto. (más…)

La seguridad web desde WordPress como Framework de Desarrollo

post image

Por Carlos Mendoza
Consultor Open Source en OpenSistemas

Wordpress_security_whiteLa tendencia actual para el desarrollo de aplicaciones es utilizar un framework, debido a la capacidad de abstracción que este puede generar y, por consiguiente, el tiempo que nos reduce para desarrollar nuevas funcionalidades. Muchos de estos traen sus propias capas de seguridad integradas, y es necesario aprender bien de ellos para no echar a perder el tiempo empleado por los creadores para desarrollar dicho framework.

De la misma manera, algunos desarrolladores han creado herramientas para Gestión de Contenidos Web (CMS por sus siglas en inglés) como, por ejemplo Joomla!, Drupal o WordPress. Estas herramientas ayudan a crear sitios web o aplicaciones web mucho más rápido que desarrollándose desde cero. Una ventaja muy especial que tienen los CMSs es que permiten integrar nuevas funcionalidades a modo de plugins y plantillas para la visualización a modo de temas. Es justamente en esta parte donde entra el desarrollador, ya que muchos desarrolladores de la comunidad que integran los CMSs mencionados son terceros que desean ayudar al crecimiento y mejora de estas herramientas. Muchas veces, por simple desconocimiento, los desarrolladores crean nuevas funcionalidades sin considerar las propiedades que el CMS provee, ya sea por estar acostumbrados a programar de una manera específica o por hacerlo más rápido, pero esto provoca que se creen varios fallos de seguridad en el momento de utilizarlos en un entorno de producción.

WordPress como framework de desarrollo

WordPress es una herramienta libre que en sus inicios fue creada para montar rápida y fácilmente un entorno para blogs, permitiendo al usuario invertir más tiempo en lo que verdaderamente deseaba: Crear publicaciones en su blog. Con el paso de los años y con el avance de las tecnologías web, esta herramienta pasó a ser de un “simple” entorno de blogs a un CMS mucho más general, que permite crear diversos tipos de aplicaciones web como tiendas online, galerías de fotos para publicidad o entornos visuales de contenido, por citar unos ejemplos.

Esta herramienta permite integrar nuevas funcionalidades a modo de plugins, como por ejemplo, crear nuevos tipos de contenido, taxonomías, etc. WordPress provee una API de desarrollo, en su mayor parte documentada y explicada con ejemplos, que permite a los desarrolladores crear las nuevas funcionalidades que desean, facilitando varios problemas de seguridad que se puedan producir al escribir código desde cero y evitando también que se modifique el “core” del CMS a través de “hooks”.

Para enfrentar diferentes problemas de seguridad, WordPress proporciona una serie de funciones, algunas de las cuales se describen a continuación.

1. Autenticación y autorización
WordPress utiliza una clase llamada PHPass para tratar con el tema de la seguridad de la contraseña. Dentro de esta clase se encuentra el método HashPassword, que es el que se encarga de encriptar la contraseña ingresada por el usuario al registrarse o al hacer login en la aplicación. Esto lo hace utilizando la función crypt de PHP, enviándole también un parámetro generado aleatoriamente como un salt.

Como el primer fallo de autenticación es el fallo humano, es recomendable no utilizar nombres “estándar” para usuarios, como “admin”, “administrator”, “wordpress”, ya que son los usuarios que primero se utilizarán para un ataque.

La segunda táctica de entrada sería la debilidad de la contraseña. En las últimas versiones de WordPress se ha incluido un generador de contraseñas para ayudar a los usuarios a tener una contraseña segura y evitar que su usuario sea vulnerable. Existen plugins que se encargan de reforzar la seguridad de login de WordPress, como por ejemplo Login Security Solution y Stop User Enumeration, este último evita que se pueda “adivinar” nombres de usuarios de WordPress en el front utilizando la página de autor.

Cuando se trata de formularios, WordPress se asegura de que el origen de la petición sea desde la misma aplicación, mediante el uso de nonce. Nonce puede ser utilizado a modo de variable (en caso de enviar por GET) o campo en un formulario. Para crear un nonce, WordPress ofrece la función wp_create_nonce($action), esto permite que se genere un token que será utilizado una única vez. El parámetro $action determina un valor particular para el nonce que se desea crear, esto es para poder aplicar filtros particulares para esta acción mediante un plugin. También existe la función wp_nonce_field(), que crea un campo de tipo hidden para el formulario. Esta función recibe algunos parámetros para indicar el nombre del nonce y otras condicionales para generar también un campo con el referer, de tal manera que se pueda asegurar la procedencia del formulario.

El valor generado para nonce será verificado posteriormente por la función wp_verify_nonce().

2. SSL
WordPress permite configurar que las diferentes peticiones que se realicen entre el cliente y el backend (Administración) sean mediante SSL. Esto se logra definiendo una constante en el fichero de configuración llamada FORCE_SSL_ADMIN.

<?php define('FORCE_SSL_ADMIN', true);?>

3. Ataques XSS
Con el propósito de evitar ataques XSS, WordPress ofrece una serie de funciones que permiten validar los datos de entrada, especialmente para los formularios y para la creación de nuevas entradas en el blog. Estas funciones se clasifican de acuerdo a su uso y son:

Slugs
sanitize_title( $title ) crea un slug a partir del título de la entrada o página para ser identificado, reemplazando espacios y ciertos caracteres por “-“.
sanitize_user( $username, $strict = false ) que filtra el nombre de usuario al crear uno nuevo, de tal manera que omita caracteres no permitidos para nombres de usuario. En caso de que $strict sea true, sólo permitirá caracteres alfanuméricos y _, espacio, ., -, *, @

HTML
balanceTags( $html ) / force_balance_tags( $html ) analiza el texto html que se inserta en el contenido de la entrada para evitar que se queden etiquetas html sin cerrar para que dicho contenido sea válido.

tag_escape( $thml_tag_name ) reemplaza los caracteres que no sean de tipo a-zA-Z0-9_:, para crear el slug por el que será identificada la etiqueta.
sanitize_html_class( $class, $fallback ) filtra los valores para nombres de clase y que éstos sean válidos para html.

Email
is_email( $email_address ) permite validar que la dirección de correo electrónico insertada sea válida al realizar ajustes en el campo email de usuario.
De la misma manera, existe un conjunto de funciones que filtran la salida de los campos, como el contenido de una entrada, para filtrar por etiquetas o códigos (scripts) no permitidos.

Por último, la mayoría de estas funciones aceptan diferentes tipos de hooks, que pueden ser acciones o filtros, permitiendo agregar nuevos tipos de validaciones dependiendo del valor que se le pasa.

Cabe recalcar que estas funciones pueden ser reutilizadas en diferentes ámbitos, por lo que sirven también durante el desarrollo de plugins, facilitando la validación de los mismos.

4. Robo de sesiones
Con la idea de prevenir un robo de sesión, WordPress permite configurar que el login se realice por SSL, basta con definir la constante FORCE_SSL_LOGIN en el archivo wp-config.php. Con esto se evita que las contraseñas sean enviadas en texto claro.

<?php define('FORCE_SSL_LOGIN', true);?>

Aún así, existen plugins que pueden reforzar este tipo de seguridad, como la doble autenticación de Google Authenticator.

5. SQL Injection

Cuando se trata de manejar valores en las diferentes operaciones en una BBDD, WordPress ofrece varias funcionalidades para evitar posibles ataques por inyección sql.

La base de datos de WordPress consta de unas tablas generales o estándar, que son las principales tablas que se utilizan durante la sesión y la navegación. Estas tablas tienen nombres por defecto y una persona con conocimientos generales de una base de datos de WordPress podría identificar fácilmente dichas tablas.

Para evitar que se pueda atacar directamente a las tablas, en el fichero de configuración de WordPress se puede modificar el prefijo que se utilizará como parte del nombre de las tablas de la base de datos, de tal manera que un atacante no sepa en primera instancia los nombres de dichas tablas. Si se llegara a dar un ataque por inyección, al menos no habría que ponérselo tan fácil al atacante, ¿no?

Por otro lado, para el envío de valores a través de un formulario, WordPress proporciona una función llamada “prepare”, que es muy similar a mysql_real_escape_string de PHP, pero la diferencia radica en que WordPress agrega las comillas simples en los tipos de formato establecidos (%s por ejemplo) y a su vez también permite aplicar filtros para los parámetros en algún caso en particular. Estos filtros podrían ser validaciones propias del creador del plugin. Para esto es necesario utilizar la variable global $wpdb (una instancia de la clase wpdb) que es quien gestiona los datos de conexión en WordPress. Esta clase contiene los nombres de las tablas estándar de una base de datos de WordPress, de tal manera que no sea necesario escribir el nombre de la tabla. Por ejemplo, una query para consultar la tabla de usuarios filtrando por el login podría ser:

<?php $wpdb->prepare("SELECT * FROM $wpdb->users WHERE user_login = %s", $user_login);?>

Para el caso de sentencias donde se desea insertar, actualizar o eliminar datos, wpdb ofrece métodos que permiten realizar dichas sentencias, permitiendo también las restricciones por formato. Por ejemplo, para insertar un nuevo registro en una tabla rs_suscripciones creada en un plugin:

<?php $wpdb->insert(
    $wpdb->prefix."suscripciones",
    array("user_id" => $user_id, "blog_id" => get_current_blog()),
    array("%d", "%d")
);?>
<?php $wpdb->update(
    $wpdb->prefix."suscripciones",
    array( "blog_id" => get_current_blog()),
    array( "user_id" => $user_id), //where
    array( "%d" ),
    array( "%d" ) //formato del where
);?>

Como se puede observar, la forma sugerida para el nombre de la tabla es conservar el prefijo estándar para la instancia de WordPress, de tal forma que se mantenga la homogeneidad.

Conclusión

Las diferentes funciones que ofrece WordPress permiten que los desarrolladores de plugins puedan crear nuevas funcionalidades tomando en cuenta la seguridad, incluso también crear nuevos plugins que incrementen la seguridad del portal web. Aún así, es necesario quienes montan el entorno deben tomar las medidas necesarias para evitar los ataques más básicos. Asimismo, no es muy recomendable confiar en cualquier plugin que se encuentre, es mejor buscarlos en sitios determinados y oficiales, como la misma página de WordPress, donde la comunidad puede valorar el funcionamiento y compatibilidad de los plugins.

¿Para cuándo la WordCamp Madrid?

Por Carlos Mendoza Garófalo
Web Developer de OpenSistemas

Hace unos meses comentaba en otro post el evento WordCamp Sevilla, los conocimientos adquiridos durante el evento y también las personas que conocimos. El pasado 8 de marzo se realizó el primer WordPress Day – Madrid, un evento organizado por Félix Zapata, Ignacio Cruz, Manrique Lopez y María Sánchez, y que contó con la colaboración y patrocinio de algunas empresas, incluyendo OpenSistemas. Este evento, que se llevó a cabo en Medialab-Prado, contó con una sala grande y otras pequeña que se utilizarían para charlas de usuarios y desarrolladores respectivamente. Para sorpresa de los organizadores (y mía también), los asistentes fueron más desarrolladores que usuarios y tuvieron que cambiar de sala a los grupos.

(más…)

Vivir la experiencia del WordCamp de Sevilla

Por Carlos Mendoza, David Múñoz, Liane Figueroa y Tamara Osona
Developers de OpenSistemas

Hace unos meses asistimos David Muñoz y yo, Carlos Mendoza, a la DrupalCamp que se llevó a cabo en Cáceres. A pesar de que soy más desarrollador para aplicaciones con WordPress, esto me sirvió de mucho para establecer similitudes y diferencias entre ambos CMS. Esta vez le tocó a David, que desarrolla sobre Drupal, experimentar estas comparativas en la WordCamp Sevilla 2013.

Representando a Opensistemas asistimos David Muñoz, Liane Figueroa, Tamara Osona y Carlos Mendoza, quienes pudimos apreciar las maravillas que nos brinda WordPress durante los dos días que duró el evento.

(más…)

Drupalcamp Spain 2013

Por Carlos Mendoza Garófalo
Web Developer de OpenSistemas

El pasado 26 y 27 de octubre tuve la oportunidad de asistir al Drupalcamp Spain 2013. Este evento se llevó a cabo en el Complejo San Francisco de Cáceres y contó con la presencia de varios ponentes que explicaron sus experiencias en el desarrollo de proyectos usando Drupal como CMS, así como las diferentes aportaciones que han hecho por medio de módulos a dicha plataforma. Se notaba claramente la buena organización del evento por parte de voluntarios y de la misma Comunidad de Drupal en España; me sorprendió que contaban con una aplicación móvil para seguir minuto a minuto la agenda del evento, así como ubicación e información de las diferentes ponencias y difusión de anuncios tipo “broadcast”. (más…)

La importancia de la accesibilidad

Por David Muñoz Sánchez
Web Developer de OpenSistemas

En la mayoría de los proyectos web pocas veces se tiene en cuenta la accesibilidad dentro del alcance. Se considera que un buen desarrollo se ha completado correctamente cuando la aplicación es funcionalmente correcta y se ve bien en una serie de navegadores.

Pero actualmente la web es un entorno abierto en el que todo tipo de personas, y con esto me refiero a personas que puedan tener algún tipo de discapacidad, pueden navegar y exigen el mismo nivel de calidad al recorrer los diferentes sitios que se encuentran alojados en Internet.

Al principio, Internet fue concebida para el intercambio de documentos estructurados semánticamente, de tal forma que si leías cualquier parte del documento pudieras saber qué relevancia tenía, si formaba parte de otro elemento superior o qué significado semántico poseía. (más…)

Nuxeo vs OpenCMS

Por Jose Ignacio Yarza Vidal

Project Manager de OpenSistemas

Nuxeo y OpenCMS son dos gestores de contenidos open source escritos en Java. Desde el punto de vista corporativo lo que les hace destacar sobre otros CMS basados en otras tecnologías son dos características clave: interoperabilidad y escalabilidad dentro de la infraestructura corporativa.

Nuxeo es un gestor documental orientado a flujos de trabajo y soluciones de negocio, capaz de integrarse en una arquitectura orientada a servicios corporativa.

OpenCMS es un gestor de contenidos orientado a sitios web que ofrece un potente workplace desde donde administrar el repositorio de contenidos y de código fuente. (más…)

useR conference en Albacete

Por Fernando Monera
CINO de OpenSistemas

La semana pasada asistí a “useR” en Albacete. Se trata de una conferencia a nivel mundial de usuarios y desarrolladores alrededor del software de análisis estadístico R. Obviamente estaba patrocinada ente otros por Google y Oracle.

Mi interés en la conferencia era muy alto, ya que una de las áreas fuertes de OpenSistemas es el Business Intelligence, con un fuerte componente de análisis estadístico de datos sobre todo en el área de trading. (más…)

El valor del capital humano en consultoría tecnológica

Por Javier Sotomayor Aramburu
COO de OpenSistemas

El activo más importante en una empresa de servicios de consultoría tecnológica es claramente el capital humano. En esta industria vendemos cerebros al peso, gente con un alto componente de capacidad analítica y de creatividad, que sepan buscar soluciones de forma proactiva adaptándose a entornos que cambian enormemente de un proyecto a otro. En tecnología tienes que saber adaptarte como un camaleón, y con los años de experiencia vas aprendiendo que aunque cada cliente es un mundo y tiene unas necesidades muy concretas el objetivo siempre es el mismo,  aportar soluciones tecnológicas que apoyen las necesidades del negocio. (más…)

La falsa creencia de que el software libre es gratis

Por Luis Ignacio Bacas
Developer de OpenSistemas

A estas alturas de la historia, creo que es totalmente innecesario defender el uso del Software libre o del software de código abierto en los proyectos y servicios que se ofrecen hoy en día, desde las miles de páginas web que se ejecutan en servidores Apache hasta los móviles de última generación con núcleo Linux, ya que en la gran mayoría de los casos permite reducir y repartir los costes de desarrollo y mantenimiento de dichos proyectos abaratando su coste total. (más…)