asp.net “Remember Me” cookie

后端 未结 3 1830
孤独总比滥情好
孤独总比滥情好 2020-12-14 13:12

I have implemented remember me option in my asp.net webform by using this,

protected void LBtnSubmit_Click(object sender, EventArgs e)
 {
  if (this.ChkRemem         


        
相关标签:
3条回答
  • 2020-12-14 14:08

    I would not store the ip / user id in the cookie. Session highjacking would then be really easy, I mean I know the username / ip of my collegues, I could add that cookie to my message and then I can work on the session of my collegue.

    0 讨论(0)
  • 2020-12-14 14:09

    I would not store the users password in a cookie... Rather store the user id and the ip address in the cookie.

    0 讨论(0)
  • 2020-12-14 14:13

    Rather than directly storing the username and password in the cookie, store the username and a hash of the password and a salt in the cookie, then when you authenticate the cookie, retrieve the password for the given username, re-create the hash with the password and the same salt and compare them.

    Creating the hash is as simple as storing the password and salt values together in a string, converting the string to a byte array, computing the hash of the byte array (using MD5 or whatever you prefer) and converting the resulting hash to a string (probably via base64 encoding).

    Here's some example code:

    // Create a hash of the given password and salt.
    public string CreateHash(string password, string salt)
    {
        // Get a byte array containing the combined password + salt.
        string authDetails = password + salt;
        byte[] authBytes = System.Text.Encoding.ASCII.GetBytes(authDetails);
    
        // Use MD5 to compute the hash of the byte array, and return the hash as
        // a Base64-encoded string.
        var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
        byte[] hashedBytes = md5.ComputeHash(authBytes);
        string hash = Convert.ToBase64String(hashedBytes);
    
        return hash;
    }
    
    // Check to see if the given password and salt hash to the same value
    // as the given hash.
    public bool IsMatchingHash(string password, string salt, string hash)
    {
        // Recompute the hash from the given auth details, and compare it to
        // the hash provided by the cookie.
        return CreateHash(password, salt) == hash;
    }
    
    // Create an authentication cookie that stores the username and a hash of
    // the password and salt.
    public HttpCookie CreateAuthCookie(string username, string password, string salt)
    {
        // Create the cookie and set its value to the username and a hash of the
        // password and salt. Use a pipe character as a delimiter so we can
        // separate these two elements later.
        HttpCookie cookie = new HttpCookie("YourSiteCookieNameHere");
        cookie.Value = username + "|" + CreateHash(password, salt);
        return cookie;
    }
    
    // Determine whether the given authentication cookie is valid by
    // extracting the username, retrieving the saved password, recomputing its
    // hash, and comparing the hashes to see if they match. If they match,
    // then this authentication cookie is valid.
    public bool IsValidAuthCookie(HttpCookie cookie, string salt)
    {
        // Split the cookie value by the pipe delimiter.
        string[] values = cookie.Value.Split('|');
        if (values.Length != 2) return false;
    
        // Retrieve the username and hash from the split values.
        string username = values[0];
        string hash = values[1];
    
        // You'll have to provide your GetPasswordForUser function.
        string password = GetPasswordForUser(username);
    
        // Check the password and salt against the hash.
        return IsMatchingHash(password, salt, hash);
    }
    
    0 讨论(0)
提交回复
热议问题