php - tabla - ver usuarios y contraseñas mysql




un mejor enfoque que el almacenamiento de la contraseña de mysql en texto plano en el archivo de configuración? (5)

Siempre me ha molestado que muchos programas PHP requieran que el usuario almacene la contraseña de mysql en texto plano (en una cadena o constante) en un archivo de configuración en la raíz de la aplicación.

¿Hay algún mejor enfoque para esto después de todos estos años?

Hasta ahora he llegado con dos incrementos de seguridad mínimos:

  1. hacer que el archivo sea ilegible a través de la web usando las reglas en .htaccess (en caso de que php falle o exista una vulnerabilidad de seguridad para leer la fuente de php)

  2. destruir la contraseña en la memoria después de que db connect esté hecho (no configurado) (para evitar vuelcos de cadena de una violación de seguridad, inyección, etc.)

pero, por supuesto, ninguno de ellos resuelve el problema original.

Gracias por cualquier otra idea!


Además de almacenar estos datos confidenciales correctamente, también debe crear un usuario de MySQL separado que tenga solo los privilegios necesarios y restringir el acceso a la base de datos / tablas / vistas a las que necesita tener acceso. Y dado que el servidor de la base de datos a menudo se ejecuta en la misma máquina que el servidor web, también restringe el acceso a los accesos locales. Por lo tanto, no use el usuario con privilegios de administrador si solo necesita leer datos de una sola base de datos / tabla.


Ciertamente, nunca debe almacenar una contraseña en un archivo de texto sin formato dentro de la raíz del documento. Los pasos adicionales que tome para protegerlo dependerán del nivel de acceso que tenga para configurar su servidor web.

Puede definir la contraseña en php.ini (o mediante la configuración ini en la configuración de Apache o .htaccess). O configúrelo en el entorno cuando inicie su servidor web.

No tiene sentido encriptar la contraseña, eso significa que necesita almacenar una clave de descifrado, a menos que use la contraseña proporcionada por el usuario con quórum para descifrar la contraseña (pero esto evita que las sesiones no autentificadas accedan a la base de datos, y se vuelve desordenada cuando necesita agregar nuevos usuarios al quórum).

Si es un paquete de alojamiento barato y no tiene almacenamiento accesible fuera de la raíz del documento, entonces el almacenamiento de la contraseña en un archivo de inclusión php dentro debe evitar que se exponga (el archivo será analizado por php intead de descargado). Alternativamente, simplemente nombrar el archivo con un '.ht' al comienzo puede impedir el acceso remoto.

Tenga en cuenta que su segunda opción es algo redundante: si alguien puede hacer tanto daño a su código, entonces no es necesario que extraiga la contraseña del código en ejecución.

Realmente no hay solución al problema.

DO.


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


No tiene que estar en la webroot. Puede mover el archivo fuera de la webroot y llamarlo de esa manera. Esto solo significará que el archivo no puede ser llamado directamente desde la web.

Si su código tiene fallas de seguridad, como incluir cosas sin filtrar desde datos GET, entonces ese archivo aún está en riesgo. La verdadera clave es asegurarse de que su aplicación sea segura también.


Si está dispuesto a sacrificar disponibilidad para la seguridad de archivos, puede quitar la contraseña del archivo de configuración y solicitarle a un administrador que la escriba al arrancar y almacenarla en una variable global.

Aún debe asegurarse de estar a salvo de los ataques de inyección que podrían eliminar esa variable y, por supuesto, tiene un paso manual en el proceso de (re) arranque.





passwords