Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is this a reasonable way to implement 'remember me' functionality

If a user logs into the site, and says 'remember me', we get the unique identifier for the user, encrypt this with RijndaelManaged with a keysize of 256 and place this in a httponly cookie with a set expiration of say.. 120 days, the expiration is refreshed each successful request to the server.

Optionally we generate the initialization vector based upon the user agent and part of the ipv4 address (the last two octets).

Obviously theres no real expiration system built into this, the user could technically use this encrypted key forever (given we don't change the server side key)..

I considered the fact that to allow this feature I need to allow the user to be able to bypass the login and give me their unique id (which is a guid), I figured the guid alone was really hard to guess a real users guid, but would leave the site open to attack by botnots generating guids (I've no idea how realistic it is for them to find a legit guid).. so this is why theres encryption where the server knows the encryption key, and optionally the iv is specific to the browser and ip part.

Should I be considering a different approach where the server issues tickets associated to a user, and these tickets would have a known expiration date so the server stays in control of expiration? should I really care about expiration? remember me is remember me after all?

Looking forward to being humbled ;), Cheers.

like image 664
meandmycode Avatar asked Mar 27 '09 12:03

meandmycode


People also ask

What are the different ways to implement Remember Me functionality?

Lets take a look at some of them. One of the most common ways for a site to implement the remember me functionality is to remember the username only. The username is typically stored in a cookie on the client’s computer. Remembering the username helps speed up the authentication process, but doesn’t eliminate it.

How to implement'Remember Me'functionality in Java?

But in case you have to implement "Remember Me" functionality by your own, this can be easily achieved using Cookies. Java has a Cookie class named javax.servlet.http.Cookie. Algorithm is straight-forward:

How do I use Remember_Me () function?

The remember_me () function saves the login for a user for a specified number of days. By default, it remembers the login for 30 days. The remember_me () function does the following: Second, insert a new row into the user_tokens table. Third, set a cookie with the specified expiration time.

How to implement Remember Me functionality in ASP NET MVC?

We are going to implement a remember me functionality on the login page of our asp.net MVC project. and the first way is to do that is using the FormsAuthentication.SetAuthCookie function i.e using the Forms authentication mode. We can also do that by creating cookies but just I want to let you know that


1 Answers

Very similar question.

The solution to your question is in this blog post

"Persistent Login Cookie Best Practice," describes a relatively secure approach to implementing the familiar "Remember Me" option for web sites. In this article, I propose an improvement that retains all the benefits of that approach but also makes it possible to detect when a persistent login cookie has been stolen and used by an attacker.

As Jacco says in the comments: for in depth info about secure authentication read The Definitive Guide To Website Authentication.

like image 79
Sander Versluys Avatar answered Sep 19 '22 07:09

Sander Versluys