605 51 22 25jesus@jetiradoro.com

Seguridad .env en proyectos de PHP

18 noviembre, 2017

Definición y funcionamiento

Para mejorar la seguridad en los repositorios y en las aplicaciones que desarrollamos cada día, una de las mejores prácticas es aislar totalmente los parámetros de configuración del código en si. De tal manera que passwords, tokens, credenciales, etc queden informadas en un archivo oculto en nuestra estructura de proyecto y sobretodo definido en los archivos de .gitignore para que no se suba a los repositorios de control de versiones. 

Comunmente estos archivos los llamamos .env tal cual sin extensión y sin nada, y lo único que tienen es una estrctura de clave valor, como por ejemplo:

DB_PASSWORD="secret"
DB_USERNAME="user_database"
DB_NAME='my_db'
DB_HOST='localhost'

APP_KEY='12345648askjfowfnjsandfwo'

De este archivo, haremos una copia que se llamara .env.example que si que estará en el control de versiones, y que tendrá datos de ejemplo, para que otros compañeros de proyecto se bajen la estructura y pongan aquellas credenciales que necesiten.

De esta manera en el resto del proyecto no pondremos las credenciales en plano, sino que llamaremos a una función que cargará el valor de este archivo, y de esta manera quedará enmascarado.

Instalación e Implementación

Para conseguir esto puedes intentar implementarlo por tu cuenta (no muy recomendable) pero te aconsejo que utilices técnicas y repositorios de hoy en dia que ya te solucionan esto.

Frameworks de PHP como Laravel ya utilizan esta tècnica nativamente. Pero si quieres implementarla en un proyecto nativo tuyo o con un framework que no lo use o como he hecho yo, implementarlo en la configuración de la Wiki para que no esté en el archivo de LocalSettings.php en plano (aquí explico como Configurar MediaWiki), te recomiendo que te instales el componente disponible en GitHub que el compañero vlucas a tenido a bien de compartir con la comunidad de programadores.

Aquí te dejo el enlace:

Configurar MediaWiki con archivo .env

Para configurar MediaWiki y securizarla con el archivo .env he seguido los siguientes pasos:

  1. Me he instalado el componente phpdotenv del compañero vlucas que ha compartido en su repositorio de github:

    https://github.com/vlucas/phpdotenv

    		## OPCION 1
    		curl -s http://getcomposer.org/installer 
    		
    		## OPCION 2
    		php composer.phar require vlucas/phpdotenv
    		
  1. ejecutamos composer update para asegurarnos que se carge el componente y se actualice el autoload.
  2. En la raíz del proyecto de la wiki creamos un archivo llamado .env en el cual introducimos aquellos valores que queremos securizar, como el usuario y password de la base de datos o el token de la aplicación
  3. Accedemos al archivo includes/WebStart.php y sobre la línea 117 más o menos después de que se registre el header por ejemplo insertamos el siguiente código:
    	## LOAD .ENV CONFIGURATION
    	$dotenv = new \Dotenv\Dotenv($IP); 
    	$dotenv->load();
    	
  1.  Ahora en nuestro archivo de LocalSettings.php ya podemos utilizar la función getenv(‘[NOMBRE_KEY]’) para hacer uso del valor deseado del archivo .env, por ejemplo:
    $wgDBpassword = getenv('DB_PASSWORD');

Os aseguro que funciona y es una buena práctica. Espero que os sirva de ayuda