sql >> Base de Datos >  >> RDS >> Mysql

PHP y MySQL:¿cómo evitar la contraseña en el código fuente?

La forma más fácil es, como dijiste, usar un archivo de configuración.

Muchos marcos usan esto (Zend , CakePHP , Kohana , etc) y es la forma más común de hacer las cosas (incluso en un entorno que no sea PHP como ASP.NET con su web.config archivos). Esto le permite también copiar los valores de configuración de un entorno a otro simplemente copiando los archivos para el sitio, lo cual es un beneficio en lugar de depender de las variables de entorno de configuración del servidor (que pueden perderse y olvidarse muy rápidamente).

No debería preocuparse por la ofuscación de la contraseña, ya que no es un archivo accesible para todo el mundo, ciertamente no debería ser accesible en la web. Lo que quiero decir con esto es que usted podría a) decirle a su servidor web que no entregue su archivo de configuración ( IIS ya hace esto con web.config archivos y sirve un estado HTTP 404.8 en lugar del contenido) o b) Moverlo fuera de su directorio web servido. Si alguien puede ver su archivo de configuración, es peor que tenerlo en su código fuente.

También será una buena idea tener una versión base (vacía/predeterminada) del archivo de configuración y separarlo por entornos, de modo que pueda tener un archivo de configuración diferente para las plataformas de producción, desarrollo y prueba.

Una variable de entorno es la forma más común de diferenciar entre estos entornos, algo como el siguiente código:

// Check if it's been set by the web server
if (!empty($_ENV['ENVIRONMENT'])) {
    // Copy from web server to PHP constant
    define('ENVIRONMENT', $_ENV['ENVIRONMENT']);
}

if (!defined('ENVIRONMENT')) {
    // Default to development
    define('ENVIRONMENT', 'development');
}

// Load in default configuration values
require_once 'config.default.php';

// Load in the overridden configuration file for this environment
require_once 'config.' . ENVIRONMENT . '.php';

Otra forma que es bastante común es usar un archivo de configuración XML y solo leer los valores que necesita según corresponda (almacenar una copia en caché del archivo de configuración en la memoria). Esto se puede restringir muy fácilmente para cargar solo ciertos valores, en lugar de permitir la inclusión arbitraria de archivos PHP y, en general, es una mejor solución en mi opinión, pero lo anterior debería ayudarlo a comenzar en la dirección correcta.

Probablemente querrá su VCS para ignorar el archivo. Por otro lado, es posible que desee un esqueleto del archivo, o uno con valores predeterminados razonables (este último no se aplica a los datos de inicio de sesión, por supuesto), para controlar la versión. Una forma común de lidiar con eso es tener un archivo de configuración de plantilla incorporado, y el procedimiento de instalación copia ese archivo en la ubicación del archivo de configuración real, donde se personaliza. Esto puede ser un proceso manual o automatizado.

(Si bien no tiene nada que ver con la pregunta principal, la introducción de una constante para su entorno le permite hacer otras cosas geniales, como posponer una implementación de correo falso en lugar de un SMTP uno, pero por supuesto esto también podría hacerse con un archivo de configuración)