No sin SSL
Esto no es seguro si la contraseña se envía a través de la red en texto sin formato. Hashing la contraseña en el lado del servidor tampoco es seguro si la contraseña se envía a través de la red en texto sin formato.
Dado que la <input type="password"/>
etiqueta HTML envía su contenido en texto plano, esto será un problema sin importar cómo almacene la contraseña en el servidor, a menos que su sitio web use SSL para transmitir la contraseña.
(La autenticación HTTP, que aparece un cuadro de diálogo en el navegador que solicita una contraseña, puede o no ser texto claro, dependiendo de los mecanismos de autenticación que el servidor y el navegador tengan en común. De modo que podría ser una forma de evitar esto sin usar SSL.)
No si los administradores del sitio son sospechosos
Ahora, suponiendo que esté utilizando HTTPS para hacer el sitio web, esto podría ser seguro si confía en los administradores de su sitio (que pueden leer contraseñas de texto sin formato) y otras personas que tienen acceso a la máquina para comportarse correctamente. Ahora, puede ser obvio que pueden hacer lo que quieran con su sitio web (ya que lo administran), pero si pueden leer la contraseña, también pueden usar los pares de inicio de sesión / contraseña robados en los sitios de otras personas.
Una forma que mantiene las contraseñas seguras del administrador
Una forma segura de almacenar y verificar contraseñas es la siguiente:
def change_password user, new_password
salt = random(65536).to_s(16) #will be 4 characters long
password_hash = salt + hash(salt + new_password)
store(user,password_hash)
end
def does_password_match? user, entered_password
correct_password_hash = retrieve(user)
salt = correct_password_hash[0...4]
entered_password_hash = salt + hash(salt + entered_password)
return correct_password_hash == entered_password_hash
end
Para la función hash, intente usar algo fuerte y algo que todavía no tenga buenas tablas de arco iris en la naturaleza. Puede cambiar la longitud de la sal si es necesario trabajar alrededor de las mesas de arcoiris.
Dependiendo del entorno en el que se encuentre, la variabilidad en la latencia de su red y si los nombres de usuario deben ser conocidos públicamente, es posible que desee tener otro cálculo de ruta de código hash('0000'+entered_password)
si el usuario no existe, para evitar que los atacantes determinar qué nombres de usuario son válidos en función del tiempo que lleva determinar que la contraseña es incorrecta.