Qué son y cómo usar las variables de entorno de Apache desde Plesk

Publicado el en la categoría Apache, Diseño y Programación, General, Plesk, Seguridad, VPS

El uso de contraseñas fuertes es sin duda imprescindible para la seguridad, pero a veces se puede convertir en un dolor de cabeza el gestionarlas a la hora del desarrollo de nuestra página web. Pongamos unos ejemplos en los que el buscar un equilibrio entre seguridad y comodidad puede ser complicado:

  • Si quieres que tu programador pueda hacer su trabajo pero no quieres entregarle contraseñas de la base de datos u otros servicios que use tu web.
  • Si quieres tener tu código fuente en un servicio de control de versiones de manera pública, como GitHub, pero que nadie vea tus datos sensibles.
  • Si estás desarrollando en tu máquina local y no quieres tener que cambiar tu archivo de configuración de contraseñas, nombres de usuario, etc, cada vez que subes código al servidor.

Una forma de resolver estos puntos es mediante el uso de variables de entorno de Apache. Haciendo uso de ellas, podemos crear variables a nivel del servidor, a las cuales tenemos acceso desde el código fuente, incrementando así la seguridad de las contraseñas y otros datos sensibles, y haciendo más cómodo el desarrollo.

Vamos a ver un ejemplo en PHP. Imaginemos que tenemos un archivo config.php con el siguiente contenido:

<?php
$password = "clave123";
$usuario = "usuario123";
$base_datos = "nombre_db";

Vamos a sustituir las contraseñas escritas a mano por variables de entorno de Apache. La manera más sencilla de crear estas variables en nuestro VPS es desde Plesk, accediendo a “Configuración del servidor web” para el dominio en que queremos crearlas.

Captura de pantalla 2015-06-05 a las 13.17.29En el campo “Directivas adicionales de Apache” ponemos estas variables:

SetEnv DB_PASS "clave123"
SetEnv DB_USUARIO "usuario123"
SetEnv DB_NOMBRE "nombre_db"

Cuando ya están creadas, acceder a ellas desde nuestro código PHP es muy sencillo. Lo harcemos mediante la función de PHP getenv(). El código del archivo config.php con las claves lo podemos convertir a:

<?php
$password = getenv("DB_PASS");
$usuario = getenv("DB_USUARIO");
$base_datos = getenv("DB_NOMBRE");

Como vemos, ya no hay contraseñas en nuestro código fuente, sólo hay referencias a variables que están configuradas en Apache, de forma que podemos tener nuestro código fuente en repositorios abiertos al público sin que se vean las contraseñas, o permitir que un programador pueda trabajar sin tener que darle acceso total con las claves. Además, si se está desarrollando en local, se pueden configurar también las variables de entorno en el servidor Apache local de forma que no hay que cambiar el código con las contraseñas cada vez que se sube al servidor.

No sólo puede aplicarse a contraseñas de bases de datos, podemos usarlo también por ejemplo para claves API de Twitter, Facebook, y otros servicios, además de otras configuraciones como por ejemplo a qué archivo escribir logs, a qué correo avisar en caso de errores graves y todo tipo de variables que cambian según el entorno en que se ejecuta el código.

Hay que tener presente una cosa muy importante, y es que las variables de entorno aparecen en phpinfo(), por lo que hay que ir con cuidado con esto y asegurarse de no tener ninguna página ejecutándolo, o mejor aún, desactivar la función en la configuración de PHP.

Captura de pantalla 2015-06-05 a las 13.18.08

Facebooktwittergoogle_plus