----- Original Message ----- 
From: "Marc Boncz"

Whenever I make a site or application that involves any kind of user 
validation,
I use login/password combinations. Login and password get stored in a 
database,
the login in plain text, the password hashed. When the user forgets his
password, make sure there is a mechanism to create a new one and send that 
to a
pre-approved email address.

Rationale is that hashing passwords irreversibly is the only way to 
guarantee
that NO ONE can access the passwords. Not even staff. Because if paswords 
are
readable, sooner or later someone will do so. It may take years, but one day
someone will.

<snip>

Moral of the story: NEVER EVER STORE PASSWORDS PLAINTEXT. One doesn't even 
store
mailinglist passwords plaintext, not to mention passwords of any service
involving money...

Marc
------------------------------------
Hi Marc,
              Having hashes in a data base that is writable is not that 
secure no matter how complex the encryption algorithm.

For instance, someone can create a new login account with a know username 
and password. They then look for their username in the data base and copy 
the hash associated with their username. They then write the hash into the 
data base for the target user and login with the target username and the 
password they created on the new login account.

A more secure method is to ensure the server has a dedicated IP and then 
create a remote server with a dedicated IP and SSL Cert. Configure apache in 
the secondary server so that it will only answer requests from the IP of the 
primary server. When a password is to be created the primary server sends 
the username and requested password along with some other arbitrary keys 
with predictable values, via SSL to the secondary server. The secondary 
server stores the hash in a local data base and returns a token. When 
someone logs in, the primary server looks up the token and sends that to the 
secondary server via SSL and the secondary server responds via SSL with the 
hash. The primary server then completes the login normally. To share the 
secondary server for a number of primary servers then include the new IP 
addresses in the secondary servers accept list. Also include the requesting 
IP address in the hashing algorithm on the secondary server. Tables have to 
be indexed so that the same user name can exist on the different primary 
servers.

Thanks, Rob. 

Reply via email to