¿Es posible desarrollar un sistema de inicio de sesión seguro que sustituya una base de datos MySQL por una matriz PHP?

Sería mejor cumplir con los estándares de la industria aquí cuando se trata de las contraseñas de las personas. Usted no solo es responsable de asegurarlos, sino que también lo es por ley. Puede ser demandado si sale mal.

La mejor oportunidad de hacer esto y permanecer algo seguro es si necesita al menos una contraseña de 12 caracteres, y en el formulario frontal tiene un algoritmo que elimina todos menos 4 caracteres (el algoritmo en JavaScript también puede ser de código abierto, usted no puede ofuscarlo lo suficiente como para detener a alguien que está decidido).

El uso de solo 4 caracteres como contraseña que se envía / almacena en el servidor en lugar de la contraseña completa ayudará a mantener segura su contraseña verdadera (que probablemente usan para todas sus cuentas) pero lo abre a ataques de fuerza bruta.

Aún debe mezclar esos 4 caracteres y asegurarse de limitar los intentos de inicio de sesión a 2 intentos y bloquear la cuenta de todas las IP que intentan iniciar sesión después de un error, excepto aquellas IP que se han conectado correctamente en el pasado.

Cree un perfil de dispositivo (hay una gran cantidad de información que puede rastrear de un usuario para crear una identificación única del sistema en el que se encuentra) de esos inicios de sesión exitosos para que pueda darles margen en el futuro si su IP cambia. Una cuenta seguirá siendo forzada en el transcurso de unos meses, a menos que también implemente una autenticación de dos pasos con SMS o solo permita los inicios de sesión por ip.

Después de todo eso, coloque su servidor en una caja cerrada y bótelo en el océano. Pero en serio … no lo hagas.

Sí definitivamente. Sin embargo, el beneficio de usar una base de datos tradicional para almacenar sus detalles de autenticación es que divide la lógica y los datos, lo que lo hace más seguro. Si está utilizando el control de origen como Git, confirmará el archivo que contiene la matriz de detalles de inicio de sesión y posiblemente causará un problema de seguridad en el proceso, ya que todos los que revisan el código obtienen los detalles de inicio de sesión de todos.

Sugeriría que si sigue este enfoque, al menos en su matriz no almacene contraseñas sin mostrar en la matriz de esta manera:

$ login_details = array (
formación(
“username” => “admin”,
“contraseña” => “contraseña”
),
formación(
“username” => “john”,
“contraseña” => “contraseña123”
),
formación(
“username” => “admin”,
“password” => “mycoolpassword!”
),
);

En su lugar, almacene las contraseñas con hash utilizando algo como MD5 o SHA1 para al menos ofuscar las contraseñas a los usuarios desprotegidos, que se vería así:

$ login_details = array (
formación(
“username” => “admin”,
“contraseña” => “hdsa89d789asdjksadhkashd127319827398127”
),
formación(
“username” => “john”,
“contraseña” => “djhaskj293812908361298njgdf7hf8hf”
),
formación(
“username” => “admin”,
“contraseña” => “jkh49239848hjkhsdf78923hfkjsd8972”
),
);

Sin embargo, esto solo le brinda el beneficio de la ofuscación y no impedirá que alguien cambie una contraseña al convertir cualquier valor al hash MD5 o SHA1 apropiado, es simplemente hacer que sea imposible ver las contraseñas. Presumiblemente, aquellos con acceso a Git serían personas en las que confía en primer lugar.

Si está creando una aplicación que requiere una seguridad decente, no recomendaría seguir el enfoque que ha elegido para otra cosa que no sea una aplicación insignificante en la que las personas no almacenarán la importación de información.

Sí, si los nombres de usuario y las contraseñas no cambian entre versiones, puede almacenar contraseñas con los mismos métodos que lo haría en un db (también conocido como bcrypt / similar). Sin embargo, hacerlos actualizables es menos trival.

Esto parece una mala idea.
¿Esperas muchos usuarios? Sé que en algunos sistemas que construí, cuando estaba aprendiendo, utilicé matrices para almacenar los dos usuarios que tendrían acceso de administrador. Pero llegué a ver los problemas de seguridad y moví todo a la capa de base de datos.
Si es solo para un usuario (o dos) luego de asumir un servidor Apache, puede hacerlo mejor con:
Autenticacion y autorizacion

Pero todavía usaría Mysql para ello.

Espera … ¿en qué dirección vamos? Muchas de las respuestas parecen decir “use SQL, no use una matriz”, pero parece estar preguntando “Estoy usando una matriz, ¿debería cambiar a usar SQL?”

Sí, los inicios de sesión (usuario y contraseña) deben almacenarse en una base de datos, primero con sal y hash. Dado que MySQL está disponible en casi todos los sitios y es bastante potente, es una buena opción. (Oracle es bueno, pero ¿qué sitio de alojamiento lo tiene instalado? Todos ellos tienen instalado MySQL).

Siempre uso 20 caracteres, alfanuméricos mixtos (incluyendo mayúsculas y minúsculas), con caracteres especiales, contraseñas. ¿Cómo los recuerdo? Las guardo en una contraseña segura y las “recuerda” por mí. Si sugiere algo así en su sitio y requiere contraseñas seguras, es posible que no solo esté proporcionando un sitio, sino que esté educando a algunas personas. (Sí, incluso eso puede ser forzado, pero tengo 74 años, así que no estoy demasiado preocupado. Si alguien entra en mi cuenta aquí en 30 años, ¿a quién le importa?)