2012-04-16 16 views
13

Duplicar posibles:
How to secure database passwords in PHP?¿Dónde poner la base de datos de información sensible

Me dieron recientemente un proyecto de sitio web que se supone que debe ser hecho en PHP, pero no tengo mucho experiencia en PHP. De todos modos, está funcionando pero hay una gran sala para mejorar. Lo que no me siento bien es la forma en que trato con la base de datos: pongo la información de conexión de la base de datos en un archivo db.php separado y lo incluyo donde sea necesario. Pero recuerdo haber visto archivos fuente PHP devueltos por el servidor muchas veces.

Así que ahora mi pregunta es: ¿cuál es la mejor/la mejor forma/lugar para poner datos confidenciales de la base de datos?

Por cierto, ¿cómo NO dejar que PHP muestre mensajes de error en páginas web cuando las cosas se salieron mal? ¿Una página de error personalizada o configuraciones en algún lugar de php.ini? ¡Gracias!

Nota: Estoy usando PHP en su antiguo sabor no orientado a objetos. Pero estoy abierto orientada a objetos o de manera MVC si hay mejores enfoques que manera de prepararse para futuros proyectos

+0

¡Buenas preguntas importantes! +1 por pensar en seguridad. – David

+4

Para su, por cierto, ['display_errors'] (http://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors) debería ** SIEMPRE ** ajustarse a' off 'en un servidor de producción. De esta forma, PHP arrojará un error de 500 en lugar de mostrar el error real. –

+0

Supongo display_errors = off en php.ini debe evitar que se muestren errores – anuragsn7

Respuesta

7

No sé si esto es lo que busca:
usted puede poner sus datos sensibles en su db.php, pero fuera del directorio raíz web (public_html o www).

Por ejemplo, podría tener un directorio llamado config, que es un hermano de su directorio raíz web, y almacenar allí su archivo db.php.

puede incluir su archivo db.php así:

require_once('../config/db.php'); 

espero que esto ayude.

+2

+1 para esto solución, también no se olvide de cambiar los derechos de este archivo al más bajo pero todavía legible por el servidor web. Si el archivo pertenece al proceso del servidor web, quizás '0600' sea lo suficientemente seguro. –

1

Está bien ponerlo en un archivo db.php, simplemente use require_once() justo después de la etiqueta de apertura <?php de cada documento.

Si la restricción de base no está en vigor, mueva el archivo db.php fuera de su raíz web/ftp de esa manera definitivamente no es accesible a través de http/ftp. Sin embargo, asegúrese de que los permisos estén configurados correctamente en este archivo.

Dado que no está utilizando OOP o una estructura MVC para su código, este es el mejor camino a seguir.

2

personalmente me gustaría crear un archivo llamado db.php y poner esta encima de la carpeta public_html en su servidor

por ejemplo

<?php 
    error_reporting(0); 
    $link = FALSE; 
    $link = mysql_connect('hostname', 'username', 'password'); 
    if (! $link) 
    { 
     die("Couldn't connect to mysql server!"); 
    } else { 
     mysql_select_db('databasename'); 
    } 
?> 

Esto desactiva el informe de errores, al mismo tiempo que se conecta a su base de datos, desde su index.php debería incluir el archivo así:

<?php require('../db.php'); ?> 
Cuestiones relacionadas