2009-12-27 14 views
10

Tengo un archivo config.php donde simplemente hago una gran matriz que contiene toda la configuración del marco. También la cadena fuente de la base de datos es similar a "mysql: host = localhost; dbname = mydb" (¿Cuál es el nombre, btw?) Y nombre de usuario + contraseña para DB. Me temo que esto es:¿Dónde almacena sus configuraciones de script PHP como datos de acceso a bases de datos?

  1. estúpida
  2. no es bueno; mejor solución no
  3. no segura (?)

así que cómo los expertos PHP hacen?

+1

Yo diría que se llama DSN. http://en.wikipedia.org/wiki/Database_Source_Name – joschi

+1

"cadena de conexión" es un poco más genérico que DSN. – VolkerK

+0

no lo llame 'config.php', es el primer nombre que buscará algún malware. Llámalo 'hey-this-is-just-a-useless-file-i-swear-man.php' o algo así;) – Strae

Respuesta

5

Así es como la mayoría, pero que podría también tratar algunas de estas soluciones:

  • Guardar el fichero de configuración fuera de la carpeta web (esto requiere que la configuración open_basedir en PHP está desactivado).
  • Restringir el acceso al archivo de configuración mediante el uso de .htaccess:

    < Ubicación /config.php > Orden negar, permiten Denegar de todos </Lugar >

  • uso.archivos ini y la función parse_ini_file (esto no es realmente una solución en sí misma, pero se podría combinar con los demás)

+0

Me gusta la opción .htaccess. –

12

Si usted tiene una carpeta www, httpdocs o public_http o algo por el estilo, donde se encuentra su aplicación PHP, entonces es una buena práctica para poner el archivo de configuración fuera de esa carpeta, y acaba de acceder a él de esta manera:

include "../config.php"; 

Nadie puede obtener acceso a ese archivo sin acceso FTP, por lo que es relativamente seguro en comparación con tenerlo en la carpeta de la aplicación.

Si no tiene una carpeta de este tipo, puede crear una y crear un archivo .htaccess en la raíz, que redirige todas las solicitudes a esa carpeta. Hay muchas formas diferentes de hacer eso, pero esa es una pregunta diferente, todas juntas.

+0

desafortunadamente, casi el 99,99% de todos los servidores virtuales baratos no proporcionan ningún directorio. Todo desde la raíz es accesible, y no hay acceso ftp a lo que está sobre la raíz web. – openfrog

+1

En realidad, la mayoría de los hosts 'baratos' que he tenido, han proporcionado dicho directorio de una forma u otra. También es del interés del anfitrión hacerlo. Pero mira mi edición para ver las opciones. –

+0

@openfrog: toda una declaración que tienes allí, ¿de dónde obtienes tus datos? –

6

Lo almaceno en un archivo de configuración de estilo ini de texto sin formato, generalmente sobre la raíz web para no permitir el acceso de los usuarios. En los casos en que es accesible, generalmente tengo un archivo .htaccess con deny from all para evitar todo acceso a él.

Almacenarlo en un archivo PHP accesible para los usuarios debería estar bien, pero no es ideal. Si el servidor maneja los archivos PHP correctamente, incluso si las personas pueden acceder al archivo, no pueden acceder a los valores ya que solo obtienen el resultado (nada). Por supuesto, hay problemas con esto, (ver comentarios).
El uso de archivos PHP es el método más común con los proyectos PHP (tanto FOSS como comerciales) que he usado. La mayoría de ellos no los almacenaba por encima de la raíz web. Con cualquier configuración estable, tiene muy poco sentido almacenar su archivo de configuración por encima de la raíz web, aunque dado Murphy's lawvale la pena hacerlo si puede (Eso o use .htaccess o el equivalente de su servidor para denegar el acceso del usuario a un directorio)

+2

"Almacenarlo en un archivo PHP debería estar bien". - A menos que otra actualización de software del servidor web "destruya" la configuración esp. el mapeo .php-> application/x-httpd-php ... otra vez. Esto ha sucedido antes (en compañías de hosting más grandes) y de repente todo el archivo .php se envió como texto/plain: -S – VolkerK

+0

una de las razones por las cuales PHP sin duda es una mierda;) pero no hay una alternativa real. para que podamos comenzar a ofuscar nuestro código, ¿eh? ;) – openfrog

+1

Eso no tiene nada que ver con PHP per se, pero con cuántos servidores están configurados. La ofuscación tampoco ayudará, ya que la contraseña debe estar allí en alguna forma legible para usarla para abrir una conexión. –

3

Por qué almacenar DB nombre de usuario & contraseña en "config.php" no está bien? mientras sepa, los datos en este archivo no se pueden mostrar públicamente.

E.G.

<?php 
$DB_User = "amindzx"; 
$DB_Pass = "Something"; 

// connect to DB and so on. 
?> 

a menos que el hacker pueda acceder a su FTP.

1

¿Por qué es estúpido mantener un archivo config.php simple sin ningún tipo de valores? Incluso si el programador encuentra este archivo, no puede hacer nada, porque, como amindzx, dijo "este archivo no se puede mostrar públicamente". ¿O estoy equivocado?

+0

Básicamente, no, pero la configuración de PHP del servidor podría cambiar y esto podría hacer que el archivo se vuelva visible después de todo. –

+1

"pero la configuración de PHP del servidor podría cambiar", ¿puede dar un ejemplo? –

+0

Hay algunos casos en que apache no funciona correctamente y sirve archivos php como texto sin formato. Esto no me pasó a mí, pero he escuchado historias de esto. – AntonioCS

0

por lo general almacenan la configuración en un archivo config.php también, como parámetros de conexión de base de datos, etc. rutas de archivos

1

con la información confidencial como credenciales de base de datos o la pasarela de pago, y cuando tengo control sobre el servidor, me gusta añadir líneas como la siguiente en mi configuración de Apache host virtual:

SetEnv DB_USER "myuser" 
SetEnv DB_PASS "mypass" 

En su PHP, puede acceder a ellos utilizando $ _SERVER [ 'DB_USER']. Puede hacer que este archivo de configuración sea legible solo por root, lo cual nunca se puede hacer con un archivo al que php accede en tiempo de ejecución. Una advertencia: asegúrese de desactivar php_info y no exponer estas variables con algo tonto como print_r ($ _ SERVER). (Gran parte de esto está parafraseado o robado de here.)

Para la configuración no sensible, me gusta hacer una clase llena de constantes, que es similar a su configuración, pero me gusta la OOP-ness de la misma.

class Application 
{ 
    const CONTACT_EMAIL = "[email protected]"; 
} 

usage: 
$contactEmail = Application::CONTACT_EMAIL; 
+0

Esta es la mejor solución para alojamiento compartido. – rogeriopvl

Cuestiones relacionadas