Estoy desarrollando una página web donde las personas pueden escribir y comentar cosas (no se requiere información personal) y debo poner un formulario de inicio de sesión para que los usuarios puedan ver todas sus acciones en mi página web. Mi idea es programar un formulario de inicio de sesión sin SSL y también permitir que las personas inicien sesión con Facebook si lo prefieren. La página se cargará completamente solo si JavaScript está habilitado.
-
Mi primer problema es asegurarse de que nadie pueda robar la credencial del usuario actuando como un hombre en el medio. Pensé en resolverlo con un primer hash en el lado del cliente con JavaScript y luego en el lado del servidor, si recibo valores de hash (en caso de que alguien elimine algo de JavaScript), un segundo hashing y almacene esos valores en la base de datos de usuarios. ¿Es una forma segura de implementarlo? Además, ¿hay alguna posibilidad de que algunos datos se pierdan? Si es así, ¿cómo puedo saber si los datos recibidos no están comprometidos?
-
Proteger de ataques de diccionario y de fuerza bruta. Lo resolvería contando el número de intentos de inicio de sesión fallidos asociados a esa cuenta de usuario y si es más de 8-10 en la fila, muestre un CAPTCHA en cada uno de los siguientes registros y también implemente un retraso de tiempo entre intentos sucesivos de inicio de sesión . Creo que de esta manera los cambios de IP no serán un problema porque estoy contando el número de inicios de sesión fallidos en el lado del servidor (establecería una variable de usuario en PHP).
-
El formulario de inicio de sesión. Lo implementé de esta manera (sin el hashing por ahora):
<input id="username" name="userName" placeholder="Username" type="text"> <input id="password" name="pass" placeholder="Password" type="password">
Pero cuando se envía el formulario en la URL, puedo leer la contraseña como: /LegIn.php?userName=user&pass=pass ¿Cómo puedo ocultar la contraseña?
¿Cuáles podrían ser otros buenos consejos para lograr la mayor seguridad posible sin utilizar SSL?