Etiqueta : wordpress

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…)

Cómo proteger WordPress de ataques de fuerza bruta con un sencillo plugin

Por Antonio Casado
Developer en OpenSistemas

La seguridad en Internet es cada día más complicada y aunque utilicemos herramientas seguras y verificadas como es el caso de WordPress, nuestra web siempre está disponible (24×7) para que un asaltante trate de hacerse con la contraseña a la fuerza.

Lo ideal sería elegir contraseñas robustas y difíciles de recordar y cambiar la contraseña habitualmente, pero no todos nuestros sitios web merecen tal cantidad de sacrificio y por eso existen algunos plugins de WordPress que nos ayudan a proteger nuestra web. (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.

Laravel, una apuesta segura para grandes desarrollos

Por Tamara Osona
Developer en OpenSistemas

Laravel es un framework de código abierto, bajo licencia MIT, para desarrollar apliaciones PHP de un modo mucho más rápido, ágil y sobre todo de calidad. En Laravel se emplea el más que conocido patrón de diseño MVC.

Es fácil de aprender y ofrece una interesante propuesta, especialmente para los desarrolladores que estén buscando una herramienta eficiente y de rápido aprendizaje en el desarrollo web. Además, incorpora el gestor de paquetes Composer que nos permite tener al día nuestras librerías.
(más…)

Cómo añadir campos personalizados a las revisiones en WordPress

Por David Muñoz
Developer en OpenSistemas

Antes de empezar el artículo quiero aclarar que esta es una solución que he aplicado personalmente, después de investigar creo que es la correcta, pero no lo puedo confirmar. Por ello, invito a quien conozca una manera mejor de realizarlo que lo indique y entre todos consigamos estandarizar esta funcionalidad, que a priori parece poco documentada.

Para empezar, vamos a hablar de las revisiones y de su funcionamiento por defecto en WordPress. Para el que no conozca WordPress, recuerdo que, por defecto, tiene implementado un sistema de revisiones que permite un control de versiones de los post. Dicho sistema ofrece un historial de cada cambio y la posibilidad de volver a una versión anterior del artículo, post o publicación.
(más…)

El último sprint

Por Álvaro García
Account manager de OpenSistemas

Entramos en un cuatrimestre duro, es tiempo de conseguir todo los objetivos que nos planteamos durante el año. Ahora es el momento de rematar esos desafíos para los que llevamos nueve meses trabajando.

Para alcanzar estas metas es imprescindible contar con una organización idónea, factor que tenemos muy claro en OpenSistemas y que intentamos mantener siempre.
(más…)

Sass, Syntactically Awesome StyleSheets

Por Tamara Osona
Junior Open Source Consultant de OpenSistemas

¿Cómo te ayudaría el uso de variables en las hojas de estilo? ¿Por qué en CSS tenemos que repetir líneas de código una y otra vez? logo-sassCuando estás en un proyecto grande con muchos elementos y clases, te haces estas preguntas y buscas alternativas. Ahí descubrí los preprocesadores de CSS, que cubren en gran parte estas necesidades.

Sass es un lenguaje de script que es traducido a CSS, inicialmente diseñado por Hampton Catlin y desarrollado por Nathan Weizenbaum. Empecé a utilizar lo básico de Sass hace un par de años, cuando estaba de prácticas, y poco a poco empecé a ver la cantidad de ventajas que tiene y lo simple que es.

Por ejemplo, puedes crear una variable si necesitas un valor más de una vez, o mixins, como conjunto de variables y propiedades, permite el uso de operaciones, bucles… Otra ventaja es el anidado, que permite a un selector heredar los estilos de otro sin duplicar las propiedades CSS, como también el hecho de poder separar los estilos en varios archivos y que Sass luego los unifique en una única hoja de estilo, permitiendo encapsular todo en un mismo CSS ayudando a reducir el número de conexiones y mejorar la performance. (más…)

¿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…)

Un voto a favor por Drupal 7

por David Muñoz
Desarrollador de OpenSistemas

A día de hoy es difícil no haber oído hablar sobre tres o cuatro gestores de contenidos o en siglas CMS diferentes. Joomla, WordPress, Drupal, Magento, OpenCMS… Es complicado decantarse por uno o saber cuál es más apropiado para tu web o para tú nivel técnico de conocimientos. En mi caso, he indagado a través de algunos de ellos y como ocurre cuando te vas a comprar un coche y te gustan mucho,  al final tienes que decantarte por uno. (más…)