¿Cómo conectarse de forma segura a una base de datos con PHP?

4

Actualmente en PHP (en el archivo /var/www/website.com/public_html/functions.php ). Me estoy conectando a la base de datos de esta manera:

function connect(){
    $config = parse_ini_file('/var/www/website.com/db.ini');
    $con = mysqli_connect("localhost",$config['username'],$config['password'],$config['db']);
    if(!$con){
        die("Failed to connect to Database"); 
    }
    return $con;
}

Donde está /var/www/website.com/db.ini

username=user123
password=pass123
db=mydb

con permisos:

-rw-r--r-- 1 root root 84 /var/www/website.com/db.ini

El PHP será ejecutado por www-data o root .

La raíz de website.com es /var/www/website.com/public_html/ .

¿Es esta la mejor manera de conectarse a una base de datos utilizando PHP desde un punto de vista de seguridad? También estoy haciendo este código de código abierto.

    
pregunta maxisme 28.02.2017 - 15:20
fuente

1 respuesta

3

Tu enfoque se ve bien.

  • Está almacenando las credenciales en un archivo de configuración separado en lugar de tenerlas escritas en línea en el código fuente. Esto lo hace seguro cuando se comparte el código con otros y protege las credenciales en caso de que una mala configuración permita que se imprima el código PHP simple (lo que sucede con bastante frecuencia).

  • El archivo de configuración está fuera de la raíz del documento público, por lo tanto, un usuario de la aplicación web no puede acceder directamente a él, a menos que exista otra vulnerabilidad (por ejemplo, un defecto transversal del directorio).

  • En cualquier caso, debe evitar ejecutar el servidor como root . De lo contrario, el modelo de permiso no vale nada, ya que root puede leer y escribir en cualquier archivo.

Tenga en cuenta que no tiene que lidiar con el análisis de las credenciales en su código en absoluto, en su lugar, puede especificarlas como configuración de tiempo de ejecución de PHP en la configuración del servidor, como se explica aquí .

También vea:

respondido por el Arminius 28.02.2017 - 15:57
fuente

Lea otras preguntas en las etiquetas