Well, as oliver pointed out earlier, if I had access to your password field
in the database, then all I would need to do

Is that that hash, go to the login page, take the token from the form, hash
manually, and then manually submit the POST

Then I would be logged in as that person. The only thing is, I would still
need access to your database. So as long as thats secure, I think this is
the safest way against external snoofing! :)

Also, what about a fallback, for if they don't have javascript enabled? You
should still allow them to perform an unsecure login.

-Thadeus




On Sun, Oct 4, 2009 at 12:21 PM, mr.freeze <[email protected]> wrote:

>
> Success!  I ended up going a slightly different route using only the
> jQuery sha256 plugin (considered GnuPG but I didn't want passwords to
> be decryptable by even me):
>
> 1) When a person registers, an sha256 hash is made of the username
> +password on the client and sent to the server.
> 2) When the login page is requested, a token is generated and stored
> in the session
> 3) To authenticate, the jQuery sha256 plugin combines the username and
> password, hashes them then hashes again using the token as the hmac
> key.
> 4) Once login is attempted, the token is destroyed and a new one is
> created.
> 5) On the server, a custom auth login method takes the password from
> the database and hashes it using the token.
> 6) It is compared to the hash from the client to determine success.
>
> Login, register, retrieve_password, and change_password all use this
> and it seems to work well.  I am building a re-usable class for my
> Client Tools module if anyone is interested.  The one drawback is that
> users will need to reset their password.
>
> Even if the username+password hash is captured during registration or
> password change, you still wouldn't be able to login without the
> token.  Please let me know if you see any holes in this process.
>
> Thanks,
> Nathan
>
> On Sep 29, 9:51 pm, "mr.freeze" <[email protected]> wrote:
> > I'll share my implementation once done.  Thanks for the help.
> >
> > On Sep 29, 9:08 pm, mdipierro <[email protected]> wrote:
> >
> > > You are right and I like this. You are assuming the server does not
> > > store the password already hashed. I was not assuming that.
> >
> > > On Sep 29, 8:10 pm, "mr.freeze" <[email protected]> wrote:
> >
> > > > Perhaps I misunderstand.  Here is my plan:  When the login page is
> > > > requested, the server will generate a random token, store it
> somewhere
> > > > (session most likely) and send it to the client.  The user then
> enters
> > > > their password which is hashed using the jQuery plugin.  The hashed
> > > > password is concatenated with the token then hashed again.  The
> result
> > > > is transmitted to the server.   To authenticate, the server pulls the
> > > > password hash from the database, the hashed token from wherever it
> was
> > > > stored (probably the session), concatenates them and generates a hash
> > > > which is compared to the hash from the client.  Neither the password
> > > > nor the password hash are ever transmitted.
> >
> > > > Does that seem secure?  The only weak spots are registration and
> > > > password changes I think.
> >
> > > > On Sep 29, 7:43 pm, mdipierro <[email protected]> wrote:
> >
> > > > > Basic concepts in digital identity are message integrity, non-
> > > > > repudiation, and confidentiality.
> >
> > > > > The point using SSH/HTTPS is that it performs a key exchange using
> > > > > public key encryption and that critical to confidentiality (the
> > > > > password and information cannot be stolen in transit). Public key
> > > > > allows the two parties to agree on one encryption key without ever
> > > > > transferring that key. After this initial exchange all
> communications
> > > > > are encrypted, including the transmission of the password.
> >
> > > > > Hashing (MD5, SHA, HMAC, etc) is a critical ingredient of integrity
> > > > > (together with encryption, it allow you to detect, if data has been
> > > > > tampered with). Hashing does nothing to protect your password in
> > > > > transit. You may as well send it in the clear.
> >
> > > > > That jQuery plugin does not help at all the problem of transmitting
> > > > > the password.
> >
> > > > > There are places where you get a free ssl certificate.
> >
> > > > > Massimo
> >
> > > > > > I'm going to try this:http://plugins.jquery.com/project/sha256
> >
> > > > > > On Sep 29, 6:18 pm, mdipierro <[email protected]> wrote:
> >
> > > > > > > If not running over http session.secure() will prevent sessions
> from
> > > > > > > working and login will not work.
> >
> > > > > > > hashing with a salt can easily be attacked.
> >
> > > > > > > Massimo
> >
> > > > > > > On Sep 29, 6:11 pm, "mr.freeze" <[email protected]> wrote:
> >
> > > > > > > > Reddit seems to send a clear text password but Digg and a few
> others
> > > > > > > > seem to be hashing on the client using a token salt before
> sending.
> > > > > > > > I'm too cheap to pay for a unique IP and SSL so I will try
> that
> > > > > > > > first.
> >
> > > > > > > > Question: Does session.secure do anything useful when *not*
> running
> > > > > > > > over https?
> >
> > > > > > > > On Sep 29, 4:50 pm, mdipierro <[email protected]>
> wrote:
> >
> > > > > > > > > I did not notice and that is bad.
> >
> > > > > > > > > If your app uses authentication you should have
> >
> > > > > > > > >      session.secure()
> >
> > > > > > > > > and use HTTPS. The latter line will not accept sessions
> cookies
> > > > > > > > > without HTTPS.
> >
> > > > > > > > > Massimo
> >
> > > > > > > > > On Sep 29, 4:28 pm, "mr.freeze" <[email protected]>
> wrote:
> >
> > > > > > > > > > What are sites like reddit.com doing to secure their
> logins?
> > > > > > > > > > Anything?  The login request goes over http according to
> firebug.  I'm
> > > > > > > > > > just wondering if my wiki site needs https for login or
> http is
> > > > > > > > > > acceptable or if there is another trick I can use.
> >
> > > > > > > > > > Thanks!
> > > > > > > > > > Nathan
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to