¿Qué tan segura es la verificación en vivo del nombre de usuario con JS y PHP (MySQL)?

Autoenchufe, puede consultar mi curso en Tuts + sobre esto.

Seguridad PHP OWASP

El ataque se llama “ataque de enumeración de cuenta”. Un usuario malicioso busca identidades en su sitio web y las compila. Luego hay dos ataques.

1.) Si bloquea cuentas después de tantos intentos, el usuario bloqueará a todos sus usuarios. Un amigo mío lo llamó “DDoS del hombre pobre”.

2.) Si no lo haces, seguirán forzando la fuerza bruta hasta que obtengan contraseñas. Si no aplica contraseñas seguras, es fácil ingresar.

La solución es estrangular los ataques. No use la función sleep () de php, ya que puede obtener un DDoS real si el atacante envía múltiples solicitudes.

Aquí hay un ejemplo, tendrá que dominar la lectura del código OOP.

PHP y Redis Throttler

Los pasos:

1.) Un usuario realiza una solicitud de nombre de usuario y contraseña. Registre la IP o el nombre de usuario o ambos intentados con Blacklister-> setSleeper ($ username).

El nombre de usuario es preferible a la IP ya que, como dicen los comentarios de mi código, un usuario malintencionado puede usar VPN o TOR para enmascarar su dirección y seguir saltando.

2.) Si usa la IP, una protección contra esto es usar mis clases de IPFilter e IPLookup, (requiere la base de datos MaxMind lite, necesitará configurar esto), y si la dirección IP está demasiado lejos de donde se registraron por última vez adentro, bloquéelo y envíe la solicitud al usuario si está utilizando la autenticación de dos factores observando la ciudad / país desde el que cree que intentó iniciar sesión.

Por lo tanto, si bien el uso de la IP como clave para dormir no es el mejor enfoque, es útil realizar un seguimiento para fines de registro.

3.) Si la solicitud se realiza correctamente, elimine el valor de durmiente. Si no, estrangularlos por un segundo. Dado que las solicitudes de fuerza bruta requieren la capacidad de emitir muchos comandos, esto dificultará la fuerza bruta de su sitio.

4.) Use un algoritmo de hash lento, como Bcrypt. PHP tiene esto por defecto desde PHP 5.5.

Técnicamente, esto es divulgación de información y hace que un ataque sea más fácil. Esto se debe a que proporciona una manera fácil de verificar la mitad del emparejamiento de autenticación. Sin embargo, dado que es un nombre de usuario y no algo más individual como una dirección de correo electrónico, no es una preocupación. Puedo ver fácilmente los beneficios de UX de un sistema de este tipo que supera las preocupaciones de seguridad algo menores, en mi humilde opinión.

Tenga en cuenta que no soy un profesional de seguridad, aunque ocasionalmente juego uno en compromisos con clientes.

Si le preocupan las inundaciones, configure un límite de velocidad simple por ip. Incluso una universidad o una gran empresa no se registrará a una velocidad de 100 personas por segundo (o menos) y si no muestra una marca de verificación verde junto a la entrada del nombre de usuario, nadie lo notará.

La gente ve la respuesta a, no espera una respuesta al ingresar un nombre de usuario.

El único problema de seguridad que es diferente de los peligros de forma habituales es el hecho de que alguien puede verificar y recopilar los nombres de usuario que tiene en su base de datos.

No parece mucho, pero puede usarse maliciosamente.