21 votos

¿un mejor enfoque de almacenamiento mysql contraseña como texto sin formato en archivo de configuración?

Siempre me molestó que muchos programas en PHP requieren que el usuario guarde la contraseña para mysql en formato de texto (en una cadena o una constante) en un archivo de configuración en la raíz de la aplicación.

Es el mejor enfoque para este después de todos estos años?

Hasta ahora he venido para arriba con dos mínimas de seguridad aumenta:

  1. hacer que el archivo ilegible a través de la web mediante reglas .htaccess (en el caso de php falla o hay una vulnerabilidad de seguridad para lectura de código php)

  2. destruir la contraseña en la memoria después de la db conectar (unset) (para evitar que la cadena de volcados de una violación de seguridad, inyección, etc.)

pero, por supuesto, ninguna de esas resolver el problema original.

Gracias por la ideas de otros!

10voto

Paul Dragoonis Puntos 1570

Mantener vuestro config archivos fuera de la raíz del documento es una popular forma de mejorar la seguridad de los archivos de configuración.

8voto

Martin Bean Puntos 9945

Personalmente, creo que almacenan información confidencial como detalles de la conexión de base de datos en config.ini archivo fuera de mi web en la carpeta raíz. Luego, en mi index.php puedo hacer:

<?php
$config = parse_ini_file('../config.ini');
?>

Esto significa que las variables no son visibles si el servidor accidentalmente se inicia la salida de los scripts PHP como texto sin formato (lo que ha sucedido antes, infame Facebook); y sólo scripts de PHP que tiene acceso a las variables.

También no dependen .htaccess en la que no hay ninguna contingencia si su .htaccess archivo es movido o destruidos.

5voto

mvds Puntos 26475

Ya que el código se necesita la contraseña no existe la seguridad perfecta. Pero usted puede hacer que sea difícil de recuperar.

Puse un poco de hash en mi web config, como un entorno variable, por ejemplo MYSQL_PASS_HASH

Entonces tengo que hacer algo como md5(getenv('MYSQL_PASS_HASH').'gibberish$qwefsdf') cual es la contraseña. Por supuesto, usted debe unsetenv después de que si usted es paranoico.

Su contraseña no literalmente ser almacenados en algún lugar, y que sólo pueden ser recuperados cuando alguien tiene tanto que configuración web y su base de datos.

Esto ocurre en un archivo fuera de la webroot (no poner toda su confianza en .htaccess).

2voto

Gumbo Puntos 279147

Además de almacenar estos datos sensibles correctamente, usted también debe crear un usuario de MySQL que tiene sólo el necesario privilegios y restringir el acceso a la base de datos/tablas/vistas necesita tener acceso. Y desde el servidor de base de datos es a menudo se ejecutan en la misma máquina que el servidor web, también restringir el acceso a los locales de accesos. Así que no uso el usuario con privilegios de root si sólo necesita leer los datos de una sola base de datos/tabla.

1voto

symcbean Puntos 27412

Ciertamente, nunca se debe almacenar una contraseña en un archivo de texto plano dentro de la raíz del documento. Qué pasos tomar para asegurar que dependerá del nivel de acceso que tienen a configurar tu servidor web.

Se podría definir la contraseña en php.ini (o a través de la configuración ini en la configuración de Apache o .htaccess). O ponerlo en el medio ambiente en el momento de iniciar tu servidor web.

La idea no sólo de la encriptación de la contraseña - que significa que usted necesita para almacenar una clave de descifrado - a menos que utilice el usuario proporciona una contraseña con el quórum de autenticación para descifrar la contraseña (pero esto no impide que-sesiones autenticadas de acceso a la db, y consigue sucio cuando usted necesita para agregar nuevos usuarios al quórum).

Si es un hosting barato paquete y usted no tiene almacenamiento accesible fuera de la raíz del documento, a continuación, guardar la contraseña en un include de php archivo dentro debe de impedir que se expone (archivo será analizado por php en lugar de descargar). Alternativamente, simplemente nombrar el archivo con un '.ht' al principio puede impedir el acceso remoto.

Nota: la segunda opción es un poco redundante - si alguien puede hacer mucho daño a su código, a continuación, que no es necesario extraer la contraseña de la ejecución de código.

Realmente, no hay solución para el problema.

C.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X