Esta es una pregunta general, pero se debe a una API bastante abierta que tengo para un servicio de almacenamiento de archivos que necesita tener su puerta frontal mejor cerrada.
Tenemos una API como POST '/signup'
que solo toma un nombre de usuario y contraseña y crea un usuario. Es totalmente posible que alguien escriba una secuencia de comandos muy sencilla para llamar a /signup
con cada combinación de letras que se ajuste a nuestras reglas de nombre de usuario y nos bloquee de manera efectiva de nuevos registros.
No he encontrado una enumeración concisa de todos los posibles trucos de seguridad de registro, por lo que los comenzaré ahora y pediré a alguien que contribuya con lo que omití u otros detalles de implementación en un elemento en particular.
-
Limitación de IP: para cada registro, registre la dirección IP y compárela con una tabla de IP de registro reciente para garantizar la cantidad de registros y el tiempo desde el último registro en este IP no es sospechoso. **
-
Otro inicio de sesión autorizado: utilice el correo electrónico verificado, el número de teléfono o los inicios de sesión de OAuth de terceros
-
Verificación humana: haga que los usuarios completen un Captcha o alguna forma de validación que sea demasiado costosa computacionalmente para que una secuencia de comandos la administre
** La limitación de IP parece ser la única opción que no afectará necesariamente la experiencia de registro del cliente, aunque a costa de implementar un nuevo subsistema para organizar el almacenamiento y la validación de las IP (¿Existen servicios de terceros para esto?) . Tampoco protege contra el caso extremo en que una red de atacantes (o atacantes que pueden cambiar la IP pública) distribuye el ataque a través de N IPs para hacer N nombres de usuarios.