¿Qué tan inteligente es almacenar contraseñas y nombres de usuario en archivos?

0

Entonces, quería hacer un sistema de inicio de sesión con PHP, y básicamente lo que haría sería tener un archivo para los nombres de usuario y un archivo para las contraseñas, por lo que cuando un usuario intenta iniciar sesión, solo obtiene información de ambos archivos. y coincide con las contraseñas.

Sin embargo, el lado de seguridad de mí es que es una idea absolutamente horrible. ¿Hay una manera segura de que realmente pueda lograr esto? Si tuviera que ver con cifrar las contraseñas, ¿cómo lo haría de manera segura?

    
pregunta Joshua Sparkel 18.03.2018 - 14:31
fuente

3 respuestas

2

La mayoría de las aplicaciones de PHP realizan el inicio de sesión al consultar una base de datos para validar las credenciales proporcionadas por el usuario. Bases de datos tienen muchas ventajas sobre texto sin formato . Aunque el gran problema aquí no es solo la seguridad de la base de datos (por supuesto, es mejor que use una contraseña segura para acceder a su base de datos), sino la seguridad de su aplicación en general.

Eso significa que si prefiere / insiste en usar PHP para validación / registro de usuarios, etc ... , es mejor que siga prácticas buenas y probadas en lugar de reinventar la rueda, no solo para validación, pero para cada parte de la aplicación (ya que un error aparentemente menor puede llevar a un compromiso total de la aplicación y la pérdida de la base de datos) Ahora, como es bien sabido, ningún sistema es 100% seguro, por lo que incluso si se produce una violación de la seguridad por algún motivo, no desea que todas esas credenciales de usuario se filtren en público. Así que la mejor manera de evitar eso es guardar el hash ( elegir una función de hash criptográficamente fuerte como bcrypt, etc ... ) de esas credenciales en lugar de guardarlas en texto sin formato.

Finalmente, es importante mencionar que hay marcos web ( como Django , Ruby on Rails etc ... ) que, por diseño, ofrece una gran cantidad de funciones de seguridad listas para usar ( en mi opinión, PHP carece de esta parte ) mientras que en PHP debe codificar "cuidadosamente" y seguir las buenas prácticas.

    
respondido por el game0ver 18.03.2018 - 22:46
fuente
1

Si desea hacerlo a pesar de los consejos contrarios que ya recibió, la forma estándar de proceder sería establecer nombres de usuario y contraseñas como variables en archivos PHP dedicados. Cuando un usuario intenta recuperar los archivos, este último se ejecuta como PHP sin mostrar nada.

Si está considerando almacenar contraseñas para validar los inicios de sesión, es posible que desee almacenar hashes con sal en su lugar.

    
respondido por el Enos D'Andrea 18.03.2018 - 16:39
fuente
1

Primero, sin importar dónde los guarde, debe asegurarse de que hash correctamente ellos . Esa es la prioridad número uno. Y tenga en cuenta que es hash , no encrypt . Sí, hay una diferencia. Una gran diferencia.

En cuanto a dónde almacenarlos, la opción tradicional obvia sería una base de datos. Comparemos las contraseñas de almacenamiento en una base de datos para almacenarlas en un archivo. Ambas opciones vienen con su propio conjunto de errores fáciles que pueden exponer datos.

Para las bases de datos, debe asegurarse de protegerse contra la inyección de SQL y fortalecer el servidor de la base de datos (no lo exponga a Internet, use credenciales sólidas, etc.).

Para sistemas basados en archivos, hay un grupo separado de problemas:

  • Coloque el archivo fuera de webroot.
  • Debe asegurarse de que no haya vulnerabilidades de inclusión de archivos locales en su servidor.
  • Asegúrese de que el archivo no termine en copias de seguridad, repositorios de git, etc.

Yo diría que es mucho más fácil hacerlo bien con una base de datos, ya que tiene una separación más clara entre el código y los datos. Pero lo que importa al final aquí es la implementación. Una biblioteca de base de datos homebrew mal escrita con SQLi es peor que un marco bien establecido y probado para archivos.

Sin embargo, espero que sea más difícil hacerlo bien con los archivos que con una base de datos. Y para ser honesto, comenzar con un sistema de inicio de sesión correcto en PHP es extremadamente difícil . Perdona mi pesimismo, pero la mayoría de las personas que se proponen hacer esto fracasan y terminan con sistemas inseguros. Tal vez debería mirar en los marcos existentes? Eso reduciría enormemente su riesgo.

(Obviamente, las bases de datos tienen algunas ventajas técnicas bastante grandes que no están relacionadas con la seguridad, pero las estoy dejando fuera de la discusión aquí).

    
respondido por el Anders 19.03.2018 - 11:20
fuente

Lea otras preguntas en las etiquetas