Archivo de la categoría: Bases de Datos

Nuevos comandos para Centos 7

centosLa nueva versión de CentOS 7 introduce un cambio en uno de los comandos más utilizados, service, que es sustituido por systemctl.

Por el momento el comando service continua funcionando, aunque cada vez que lo ejecutemos nos aparecerá un mensaje recordando el nuevo comando, ya que en futuras versiones será finalmente eliminado. Sigue leyendo

Facebooktwitter

¿Qué es la inyección SQL?

SQL_InjectionLa inyección SQL es uno de los mecanismos de ataque más comunes a nivel de aplicación que aprovechan fallos en la programación y agujeros de seguridad para lograr acceso a la base de datos de una web y ejecutar cualquier comando SQL sobre la misma.

Hoy en día las páginas web suelen ir ligadas a una base de datos, la cual es central para el funcionamiento de la misma ya que guarda la mayoría de contenido de la misma así como la información necesaria para su funcionamiento, credenciales de acceso de los usuarios, datos privados de estos, información de pagos, estadísticas, etcétera. Toda esta información es mostrada, cambiada o borrada de forma controlada a través del interfaz, que es la propia web.

Y es la propia web el principal vector de ataque usado para inyectar SQL. Al igual que en los ataques XSS, una mala seguridad se traduce en que un atacante pueda introducir código malicioso. Este código puede realizar cualquier acción en la base de datos, por lo que el atacante puede, por ejemplo, lograr autentificarse como otro usuario sin conocer su contraseña, otorgarse permisos de administrador, manipular cualquier registro, obtener cualquier dato o borrar cualquier registro, incluso eliminar todas las tablas de la base de datos.

Vamos a ver un ejemplo de vulnerabilidad y ataque de inyección SQL. Tenemos un formulario de login en nuestra web y ejecutamos la siguiente consulta para comprobar los credenciales enviados:

SELECT * FROM usuarios WHERE nombre = '$usuario' AND password = '$password’

Si en el formulario ponemos como nombre=Juan y como contraseña=algo’ OR ‘x’ = ‘x’, la consulta quedaría así:

SELECT * FROM usuarios WHERE nombre = 'Juan' AND password = 'algo' OR 'x' = 'x'

La parte de la consulta ‘x’ = ‘x’ siempre será evaluada como verdadera, por lo que el atacante podría saltar la comprobación de login.

Evidentemente, una vulnerabilidad en nuestro código que permita la inyección SQL es un riesgo enorme. Para evitarlo, las técnicas varían según en qué lenguaje estemos programando. En el contexto web, lo más probable es que sea PHP.

En PHP, desde la versión 5.5 las funciones mysql_* están deprecated (anticuadas y en proceso de desaparición), y a partir de la versión 7 serán eliminadas, en favor del uso de las funciones mysqli o de PDO, siendo estas últimas las más recomendadas. Para evitar la inyección SQL en PHP, PDO permite usar la técnica de parametrización de consultas, con la cual los parámetros de la consulta son saneados de forma automática mediante la función bindParam() imposibilitando la inyección de código, además quedando mejor a nivel de claridad de código.

$stmt = $dbh->prepare("INSERT INTO usuarios (nombre, password) VALUES (:nombre, :password)");
$stmt->bindParam(':nombre', $nombre);
$stmt->bindParam(':password', $password);

En el caso de usar CMS como WordPress, Joomla!, etcétera, lo recomendable es mantenerlos siempre al día, tanto el propio CMS como sus plugins y themes, ya que los equipos que los desarrollan suelen parchearlos en cuanto son detectados.

Para aquellos que quieran aprender más y prevenir estos ataques, el OWASP (Open Web Application Security Project) cuenta con guías avanzadas para la prevención de la inyección SQL, además de otros tipos de agujeros de seguridad.

Facebooktwitter

Cómo poner el tema por defecto de WordPress sin acceso al panel de administración

themes

Si tienes un plan de hosting con un wordpress y has instalado un tema que te ha dejado sin acceso a wordpress, hay una solución para ello.

Al igual que en el anterior post hemos visto cómo desactivar plugins sin tener acceso al panel de administración, después de ver las ventajas e inconvenientes de que WordPress tenga disponible una gran cantidad de plugins al alcance de unos clicks. Los temas tienen exactamente las mismas ventajas y mismos problemas: gran variedad a costa de poco control de calidad.

Esto no significa que no haya temas y plugins de gran calidad, pero sí que tenemos que andar con ojo, informarnos sobre el tema/plugin y no instalar lo primero que nos llame la atención sin investigar primero.

Igual que los plugins, un tema de WordPress puede dejarnos «tirados» por distintos motivos, por ejemplo que hayamos tocado algo que no debíamos editando un archivo, que hayamos subido algo mal, o a medias, al FTP, etc, lo cual puede dejar la web inoperativa y quedarnos sin acceso al panel de administración.

Vamos a ver las dos técnicas para solucionar el entuerto y volver al tema por defecto cuando no tenemos acceso al panel de administración:

  • Poner el tema por defecto desde la base de datos: accedemos a la base de datos, podemos hacerlo desde Plesk, pinchando en bases de datos y después en Webadmin en la base de datos donde esté instalado WordPress, de forma que se abre phpMyAdmin. Vamos a la tabla wp_options y buscamos los valores template y stylesheetCaptura de pantalla 2015-07-14 a las 15.44.58En este caso tenemos activo un tema llamado «mont-blanc». Editamos ambos valores cambiándolos por «default», guardamos y ya tenemos el tema por defecto de WordPress.
  • Poner el tema por defecto desde el FTP: entramos al FTP donde esté instalado WordPress y buscamos la carpeta wp-content, entramos a ella y cambiamos el nombre de la carpeta themes a themes_original. Entramos al panel de administración y en la sección de temas nos mostrará errores y dirá que nos devuelve al tema por defecto. Volvemos al FTP y cambiamos el nombre de la carpeta themes_original a themes y al acceder de nuevo a la web, debería cargar el tema por defecto.

Ejecutar correctamente una de estas dos técnicas puede sacarnos de un apuro importante. Descubre también cómo desactivar plugins de WordPress sin tener acceso al panel de control.

Facebooktwitter

Cómo desactivar plugins de WordPress sin acceso al panel de administración

wordpresspluginsUna de las grandes ventajas de WordPress es la gran cantidad de plugins que hay disponibles. Podemos encontrar plugins casi para cualquier cosa que se necesitemos, sin embargo, esto puede ser también un inconveniente ya que debido a que hay tantos plugins, el control sobre la calidad de estos no la presencia que desearíamos. Lo mismo ocurre con los temas.

Muchas veces tras instalar un plugin o un theme, el panel de administración puede volverse extremadamente lento (dificultando muchísimo el trabajo) o puede incluso imposibilitar la entrada al mismo, sin que este ofrezca pistas sobre qué está fallando. Además, lo más seguro es que no falle  nada más instalarlo, de forma que no podemos identificar el plugin problemático al instante, ya que suele ocurrir al cabo de un tiempo.

La única manera de recuperar el acceso es desactivar el plugin o theme problemático, pero, ¿cómo hacerlo sin tener acceso al panel de administración? Existen dos técnicas para ello.

  • Desactivar plugins por FTP:

Accedemos por FTP a la carpeta donde esté instalado WordPress. Una vez dentro, vamos a la carpeta wp-content, buscamos la carpeta plugins, le cambiamos el nombre a plugins_originales y creamos una nueva carpeta con nombre plugins.

Una vez hecho esto, entramos de nuevo al panel de administración de WordPress, y en la sección de plugins veremos varios avisos diciendo que los plugins han sido desactivados debido a un error.

Captura de pantalla 2015-07-10 a las 16.31.11Ahora que han sido desactivados por WordPress, hacemos la operación contraria. Borramos la carpeta plugins que hemos creado, que está vacía, y renombramos la de plugins_originales a plugins, y entramos de nuevo al panel. Veremos que nos salen los plugins pero desactivados, de forma que podemos ir activándolos uno por uno hasta dar con el problemático y desinstalarlo una vez lo identifiquemos.

  • Desactivar plugins desde la base de datos:

Accedemos a la base de datos a través de Plesk o desde algún programa de gestión de bases de datos y buscamos la tabla wp_options y dentro de ella la entrada active_plugins, que tendrá un valor parecido a este:

Captura de pantalla 2015-07-10 a las 16.39.24

El valor option_value contiene los plugins activos, para desactivarlos todos cambiamos el valor al siguiente:

a:0:{}

Al acceder de nuevo al panel de WordPress, todos los plugins estarán desactivados y podremos empezar con la identificación del problemático y proceder a su desinstalación.

En la próxima entrada veremos cómo desactivar un tema problemático.

Facebooktwitter

Cómo instalar MyTop en tu VPS para monitorizar MySQL

mytopMyTop es una herramienta de consola que es muy recomendable instalar en los VPS para monitorizar tu base de datos MySQL. Es especialmente interesante a la hora de identificar consultas especialmente lentas a la base de datos, y así eliminar los cuellos de botella que crean y mejorar el rendimiento tanto de las páginas web como del servidor en general. Su interfaz es muy parecida al comando top, programa en el que está claramente inspirado.

Vamos a ver cómo instalar MyTop en un VPS con CentOS 6, que es el sistema operativo más utilizado y recomendado en los VPS de Evidalia, aunque en principio se puede instalar prácticamente cualquier sistema UNIX que cuente con Perl, DBI y el módulo Term::ReadKey, incluyendo Mac OS X.

Para poder instalar MyTop, primero debemos habilitar el repositorio EPEL.

wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm

Una vez habilitado, ya podemos instalar MyTop:

yum install mytop

Así quedaría instalado MyTop en el VPS.

Ahora ya podemos utilizarlo, para ejecutar el comando vamos a suponer que nuestro nombre usuario de la base de datos es «administrador», la contraseña es «g403jd2kds» y el nombre de la base de datos es «blog». El comando tomaría esta forma:

mytop -uadministrador -pg403jd2kds -bblog

Es importante no quitar los argumentos -u, -p y -b seguidos del nombre de usuario, contraseña y nombre de la base de datos sin dejar espacio como en el ejemplo. Y ya tendríamos mytop en marcha para monitorizar la base de datos.

Para más información, se puede ver la documentación oficial y la web oficial.

Facebooktwitter

¿Sustituirá MariaDB a MySQL?

Una pregunta que se están haciendo muchos usuarios es si MariaDB sustituirá en un futuro a MySQL y es que los usuarios de MySQL están bastante descontentos con el rumbo que está tomando el desarrollo de este popular sistema de bases de datos.

La adquisición de MySQL por parte de Oracle, presagiaba la perfecta unión entre el gigante de las bases de datos y el pequeño software libre que se había abierto camino y despuntaba respecto a otros sistemas. Pero parece ser que esta unión no está dando los frutos esperados y se está dejado al desarrollo de MySQL en un segundo plano, evolucionando muy lentamente.

MySQL es un referente en sistemas de bases de datos en el ámbito del software libre, pero la continua evolución de estos sistemas necesita de una evolución paralela en los sistemas de almacenamiento de información. Aquí entra en juego MariaDB, un nuevo proyecto Open Source que deriva de MySQL y que está gustando mucho a la comunidad debido principalmente a su gran optimización, obteniendo unos tiempos de respuesta muy superiores a los de MySQL.

Otra ventaja al adoptar el sistema MariaDB es que al derivar de MySQL, es totalmente compatible y no hay que realizar ningún cambio a nivel interno de programación. De hecho, MariaDB utiliza los mismos conectores y el mismo fichero de configuración.

Veremos que nos deparará el futuro, pero lo que es seguro es que MariaDB dará mucho que hablar.

¿Sustituirá MariaDB a MySQL?

 

Facebooktwitter

Curso phpMyAdmin: Crear y restaurar copias de seguridad

Curso phpMyAdmin: Crear y restaurar copias de seguridadEn nuestra anterior entrega Operaciones con la base de datos vimos como crear copia de la base de datos en nuestro propio servidor. Como ya os comentamos, esta opción es viable para crear una copia temporal, pero no una copia de seguridad definitiva, ya que si nuestro servidor tiene algún percance, no dispondremos de material para hacer la restauración. Por esta razón es conveniente tener las copias de seguridad en varios equipos o dispositivos diferentes. Hoy os mostraremos como crear y restaurar copias de seguridad de nuestra base de datos. Sigue leyendo

Facebooktwitter

Curso phpMyAdmin: Operaciones con tablas

Curso phpMyAdmin: Operaciones con tablasYa hemos visto como crear tablas, insertar valores en ellas y mostrar estos registros insertados a modo de búsquedas o consultas. Continuamos nuestro curso de phpMyAdmin y esta vez vamos a ver como realizar operaciones con las tablas, es decir, vamos a explicaros como copiar, borrar o renombrar la tabla entera. Sigue leyendo

Facebooktwitter