Blog

Git y programación

Git y programación web: cuidado donde dejas tu repositorio

Diseño y desarrollo web

Git se ha convertido en la elección número uno de los desarrolladores para llevar el control de las versiones de sus proyectos. Para el usuario que no conozca Git, se puede denominar como ese programa que organiza las versiones de un proyecto de forma fácil para poder llevar un control de los cambios y, si nos hemos equivocado en algo, podemos volver a una versión anterior como si no hubiera ocurrido nada.

Al ser tendencia, todo el mundo quiere aprender y saber utilizarlo. Es simple aprender a manejar los comandos principales, pero hay que saber qué hace de verdad cada comando y en qué momento hay que hacerlo. Por supuesto, hay tutoriales por todos los rincones de internet y hasta tutoriales interactivos donde te muestran la mecánica a seguir.

Por supuesto, a estos desarrolladores se incluyen los programadores webs, donde utilizan Git para tener un repositorio con todos los cambios realizados durante el desarrollo y los posibles periodos de modificaciones o actualizaciones cuando la web ya está online. Git ahorra mucho tiempo, ya que solo se necesita solicitar la última versión que exista y se descarga automáticamente sobrescribiendo todos los posibles cambios y añadiendo o borrando ficheros.

Si queremos tener nuestra página web en un repositorio y poder llevar el control de versiones, debemos de saber qué hay y qué no hay que hacer durante en este repositorio:

Visibilidad del proyecto

Una cosa importante de los repositorios es que se puede elegir la visibilidad de cara al público, si ser pública o privada. Muchos de los desarrolladores ponen sus proyectos en privado durante su desarrollo o pueden que estos proyectos no deben de ser vistos por el público para evitar posibles fallos de seguridad o ‘puertas traseras’ para futuros atacantes de la web.

Si algún atacante tiene acceso a todas las versiones, pueden ver exactamente donde atacar y, si no está protegido, pueden subir hasta una nueva versión con una modificación leve para poder atacar en un futuro cuando esté la página web online. Parece una película, pero es lo más básico que puede hacer un atacante.

Acceso y edición mediante claves SSH

Si vuestro servidor web tiene acceso por SSH, se puede cifrar mediante claves las conexiones a nuestros repositorios y, así, solo podrá conectarse y modificar los usuarios con el par de claves pública/privada que nosotros hemos asignado desde el panel de administración del repositorio.

Como son únicas, podemos confirmar que sólo ha podido acceder esa persona teniendo los dos pares de claves, por lo que evitamos así que terceras personas puedan acceder y cambiar nuestro proyecto sin nuestro permiso.

¿Por qué SSH antes que inicios de sesión de usuario:contraseña?

Este último puede estar comprometido más fácil, ya que un usuario de nuestro equipo puede tener el mismo par de claves usuario:contraseña, por lo que si es hackeado en otro sitio, ese clave puede ser probada en todos los sitios de Internet con la intención de obtener acceso a todos los datos posibles. Por el otro lado, las claves SSH son cadenas de texto guardadas en ficheros que pueden ser transportados o guardados en sitios seguros donde añadir más protección a estos ficheros. Además, si no poseen estos dos ficheros, no es posible hacerse pasar por nosotros de ninguna forma.

Ficheros con información delicada

No subir ningún fichero con:

  • Información delicada como ficheros con creedenciales, como: wp-config.php de WordPress, que lleva todos los datos de acceso de la base de datos.
  • Información de versiones instaladas, muy útil para los atacantes si pueden acceder a ellos, ej: leeme.txt, licencia.txt…
  • Copias de seguridad de bases de datos donde está toda la información de nuestro sitio web.

Parece una tontería, pero evitando subir estos ficheros con datos vulnerables que pueden volverse en nuestra contra, podremos estar más a salvo si alguien puede acceder a este repositorio.

¿Cómo evitar subir estos ficheros?

Git tiene una opción de crear un fichero oculto llamado ‘.gitignore’ (con el punto al principio, que es como se indica los ficheros ocultos en sistemas UNIX como Linux o MacOS). En este fichero, podemos añadir una lista negra de ficheros y carpetas que no queremos que se suban a nuestro repositorio y ficheros que no necesitamos que detecte cambios el sistema de Git. Así, evitamos un filtrado de información innecesaria, además de ahorrarnos tiempo en obviar estos ficheros cada vez que queramos subir una nueva versión.

Carpeta del repositorio fuera del sitio web

Otro consejo es tener el repositorio fuera del directorio raíz de nuestro sitio web. ¿Por qué?

Debido al sistema de ficheros de Git, se crea una carpeta con toda la información de versiones y acceso al repositorio. Si dejamos nuestro repositorio en el directorio raíz, cualquiera puede utilizar nuestra web para clonar el repositorio y llevarse una copia de nuestros datos. Datos que pueden ser muy interesantes si no hemos protegido toda la información mencionada del primer consejo.

Si no es posible sacar del directorio raíz la carpeta de Git, podemos proteger el acceso y la clonación añadiendo una línea de protección al fichero ‘.htaccess’. Fichero del que hemos hablado en varias ocasiones, pero para los usuarios que no lo recuerden, es aquel que va en la raíz de cualquier directorio para proteger o modificar ciertas conductas o ejecuciones de ficheros. En este caso, editaremos nuestro fichero ‘.htaccess’ de nuestro directorio raíz (o creamos el fichero si no lo tenemos) y añadimos la siguiente línea:

RedirectMatch 404 /\.git

Con esta línea, además de proteger la carpeta ‘.git’ (donde se guardan todos los datos del repositorio) para que si alguien intenta acceder le diga que no existe, protegemos ficheros importantes que comiencen por ‘.git’ como ‘.gitignore’ o ‘.gitmodules’, además de futuros repositorios que podamos añadir más tarde.

Puede parecer que nadie se preocupará de buscar un agujero de seguridad en nuestra web, pero hay bots que buscan en páginas de forma aleatoria para poder descubrir estos datos e intentar sacar beneficio de esta situación. Desde hace ya algún tiempo, hay bots que buscan beneficiarse de esta situación y otros de alertar que tienes este problema e intentar ayudarte. Una línea puede hacer ahorrar mucho tiempo y muchos sustos.

Y hasta aquí los consejos esenciales que hay que tomar si utilizar Git como control de versiones para el desarrollo y la programación de tu sitio Web. Cuanto más seguro es nuestro sitio, menos preocupaciones tendremos durante su puesta online. ¿Tienes algún consejo más que aportar? 🙂

¡Si te ha gustado comparte y haz comunidad!