Creé un panel de administración web con la siguiente implementación de seguridad.
- Se encuentra en un subdirectorio de la web, lo que provocará un error 404 cuando se intente acceder (al igual que el enlace está roto o no existe).
- Esto (solo si se abre el subdirectorio correcto) a su vez envía un correo electrónico al administrador, con una URL, que tiene un token.
- El token es de 2 partes, una es un md5 aleatorio de 5 números de 5 dígitos al azar, otra es un
md5(strrev(md5(IP_ADDR)))
. El token se guarda en la base de datos al invalidar todas las demás sesiones. - Estas fichas están separadas por un signo _.
- Cuando el administrador (o alguien) intenta acceder a la URL, primero se compara la señal IP si la misma IP está accediendo a la URL. Si no, se muestra la página 404.
- En caso afirmativo, el token aleatorio guardado en la base de datos se compara con el que se envió por correo. Si esto también tiene éxito, se abre el panel de administración.
- Cualquier intento no válido mostrará un error 404.
- Este token se invalidará automáticamente cada 20 minutos, gracias al trabajo cron.
Siempre que el administrador del sitio web pueda abrir el correo electrónico.
¿Cuáles podrían ser las fallas en esta implementación? ¿Cómo se puede mejorar esto?