[Pregunta]: Escucho sugerencias (Validar email)

Iniciado por Leguim, 1 Octubre 2019, 08:10 AM

0 Miembros y 2 Visitantes están viendo este tema.

Leguim

Buenas noches,
estaba haciendo un sistema para validar email donde se enviará un correo electrónico con un código de verificación que el usuario deberá enviar por medio de un formulario que este a su vez si el código es correcto validará su email y podrá usar la aplicación...
Ahora sería lógico pensar que a la larga van a quedar cuentas in-activas de usuarios que nunca validaron su dirección de correo, o crearan correos al azar "fasdfas@gmail.com", etcétera... y nunca van a validar estos emails, entonces pensé cual sería la mejor manera para evitar estas cosas.

La solución que se me ocurrió fue no evitarlas, sino que cada x tiempo se borren todas las cuentas de usuarios con el correo sin verificar, pero esto no lo se hacer así que mejor sería que al ir al panel administrativo exista un botón que diga "Eliminar cuentas no verificadas (25)" 25 sería la cantidad de cuentas que no se validaron (Un poco de diseño al botón xD)

¿Cuáles son sus sugerencias?

#!drvy

Ambas opciones son validas. Lo primero lo puedes hacer con CRON.

https://blog.desdelinux.net/cron-crontab-explicados/


En ambos casos, asegurate de borrar cuentas no verificadas que tengan cierta antigüedad, capaz si le das al botón de "eliminar cuentas no verificadas" justo eliminas una que se acaba de registrar y que no le ha dado tiempo a verificar el correo.


Saludos

@XSStringManolo

#2
Y porque creas la cuenta antes de validarla?
Simplemente no crees la cuenta hasta que pinchen en el link del correo.
Verifica también si la cuenta ya existe para que un usuario no se haga varias cuentas sin querer a base de F5.


Yo personalmente lo haría así:

-Crear un script "cuentas/registrar.php" que otorgue una cookie al usuario y cree dinámicamente dos nuevos archivos:
1) "temporal/cuenta-123456789.php" cuando se complete correctamente el registro.
Y
2) "automatizacion/borrar_link_cuenta-123456789.php".

-Dentro de "temporal/cuenta-123456789.php" estará el nombre de la cuenta y una función para crear la cuenta. En la función tomaría como parámetro la cookie para que solo el cliente que rellenó el usuario pueda activar la cuenta.(esto es opcional, también puedes darle un código de activación único).

-Al correo del usuario se envía:
Bienvenido a example.com, para finalizar el registro ingrese a https://example.com/temporal/cuenta-123456789.php
Tras visitar el enlace su cuenta será creada. Será redirigido automáticamente al portal de ingreso. Para acceder ingrese con el usuario y la contraseña que facilitó en el registro.

-Desde "temporal/cuenta-123456789.php" arrancas el script "automatizacion/borrar_link_cuenta-123456789.php" este script se ejecuta hasta pasados 10 minutos desde el envio del correo al usuario y borra el archivo "temporal/cuenta-123456789.php" pasado ese tiempo. O si se activó la cuenta también lo borras. En caso de que la cuenta se active mediante el link pero el usuario no haga login en la cuenta, yo borraría la cuenta porque es sospechoso que se active la cuenta pero el usuario no haga login.
Puedes habilitar un "Renviar Correo" donde se vuelva a crear un archivo "temporal/cuenta-1737281928.php" tras completar un captcha.

-Para el nombre de archivo "temporal/cuenta-123456789.php" generas el número 123456789 con un algoritmo de (PRNG) Pseudo Random Number Generator con entropía por hardware. Puedes usar alguna función, librería o puedes crearlo tu mismo con pocas líneas con un contador, un timer, un for y una operación matemática como podría ser una multiplicación al resultado para expandirlo y que un cambio mínimo en el resultado genere un resultado muy diverso. Te recomiendo codificar el resultado en base64 varias veces para evitar ataques de fuerza bruta devido a poco tamaño de url, de forma que te quede algo como:
"temporal/cuenta-Vm0wd2VFMUdiRmRpUm1SWFYwZG9WbGx0ZUV0WFJteDBaRWhrVmxKc2NIcFdNakZIVjBaS2MyTkliRmRpVkZaeVZtMTRTMlJXUm5OaVJsWlhZbFpKZWxaclpEUldNVnBXVFZWV2FHVnFRVGs9.php" en vez de temporal/cuenta-123456789.php" un hash sería más seguro, pero si el PRNG es largo y seguro, no tienes problemas en usar base64.


Habrá varias librerías y frameworks que te hagan todo esto automáticamente.

De todas formas es bastante sencillo y rápido de implementar uno mismo.

engel lex

string Manolo solo pensaré... jamas has trabajado con sistemas en producción! XD

CitarY porque creas la cuenta antes de validarla?
la pregunta ni sentido tiene XD

Citary cree dinámicamente dos nuevos archivos
XD wtf!?

y ahora dejando de lado las locuras y volviendo al mundo normal



por un lado las cuentas no verificadas no son un problema real, son cuentas con minimos datos (usualmente unos pocos datos que no llegan a 1kb) que a demás la base de datos por defecto terminará reduciendo en tamaño, perfectamente te puedo decir que tengo tablas con cientos de miles de registros que no superan la veintena de MB

así como te dice #!drvy tan simple que con un cron limpias la tabla esto puedes correrlo una vez por mes a las cuenta de mas de 1 mes de antig:uedad sin problemas porque no se acumularán tantos datos para ser molesto, pero estos números quedan en tus manos (te sorprenderías cuanta gente toma mas de una semana para verificar correo)

puedes dejarlo como una tabla separada tal que al verificarse sea copiado a una tabla de producción y así te evitas chequear si está verificada en el sql


El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Leguim

#4
Es más complicado hacerlo así, las cuentas se tienen que registrar si o si (me encantaria que no) independientemente de si se verificaron o no.. acordate que tengo que darle un codigo de verificación al usuario... la aplicacion web cuenta con que los usuarios van a poder cambiar su correo en el futuro y cuando hagan esto va a ser activado un nuevo proceso, se genera un nuevo codigo, y setea email_verified = 0 y lo manda a la pagina .php para ingresar x codigo

El problema por ahí no es solamente el peso aunque es algo importante, sino que también x persona que no tenga nada que hacer se ponga a registrar cuentas con correos validos de otras personas y nunca más las valide y esas personas que se quieran registrar con ese correo que en principio era de ellos no van a poder hacerlo...

Muchas gracias a los 3, voy a borrar las cuentas con 15 dias de ambiguedad..
;-) ;-) ;-)

#!drvy

Cita de: string Manolo en  1 Octubre 2019, 16:02 PMYo personalmente lo haría así:

Yo le veo varios problemas, siendo el principal que rompes el propósito.  La idea de Miguel es borrar cuentas no verificadas, y vale, con tu metodo dichas cuentas no llegarian a la base de datos pero si se crearian archivos.. que viene siendo más o menos lo mismo. Por otro lado, tendrías que darle permisos de escritura a dos archivos php, uno que cree los dos archivos de los que necesitas y que uno de ellos sea capaz de borrar otros archivos. Llegados a este punto, seguro que le puedes ver los fallos de seguridad que puede llegar a provocar eso. Además estaríamos metiendo INPUT del usuario en un archivo PHP ejecutable, vamos, la receta perfecta del desastre xD. Por ultimo, es menos eficiente pues tendrias que usar tanto consultas a la base de datos como consultas al sistema de archivos para comprobar el usuario y si se ha registrado o no, etc etc.


Saludos