当前位置:网站首页>防止Cookie修改id欺骗登录

防止Cookie修改id欺骗登录

2022-07-27 06:59:00 丁亚涛

在开发网站时,经常需要通过保存在Cookie中的id恢复Session登录。恶意用户通过修改Cookie中的id欺骗登录,例如,在开发者模式下:

 笔者设计了自动重新申请session的机制(具体见前期文章),当session过期,可以创建新的session续航。为了防止修改id,可以采用校验码机制:

(1)登录时创建校验码:check_key并生成验证序列check_code

(2)将id和验证串check_code保存到cookie中,将check_key保存到用户表记录字段中

(3)需要通过cookie恢复网页时,将cookie中的验证串和通过用户表存储的check_key计算出来的验证串作比对,从而实现防欺骗

(4)由于cookie中的id附加了验证串,在登录时需要清除,防止文本框(设id为txtUserID)自动搜索填充:

    $(document).ready(function () {
        var c_input = $("#txtUserID").val();
        if (c_input.indexOf("|") != -1)
            $("#txtUserID").val(c_input.split("|")[0]);
    });

(5)网页中的验证:

HttpCookie readcookie = Request.Cookies["userID"];
string[] a_uid = readcookie.Value.ToString().Split('|');
string cuid = a_uid[0];
string ccheck = a_uid[1];
if (Users.CookieCheck(cuid, ccheck) == false) Response.Redirect("login.aspx");

(6)Users类创建验证方法

public bool CookieCheck(string cuserid, string ccheckstring)
{
            DataBase DB = new DataBase();
            string sql = "select user_check from users where USERID='" + cuserid + "'";
            DataSet ds = DB.GetDataSetSql(sql);
            if (ds.Tables[0].Rows.Count <= 0)
            {
                return false;
            }
            else
            {
                string c_user_check = ds.Tables[0].Rows[0].ItemArray[0].ToString();
                if (String.IsNullOrEmpty(c_user_check) || c_user_check.ToLower()=="null") return false;
                int nkey = int.Parse(ds.Tables[0].Rows[0].ItemArray[1].ToString());
                if (ccheckstring == CreateCookieCheck(cuserid, nkey))
                    return true;
                else
                    return false;
            }
}

public string CreateCookieCheck(string cuserid, int nkey)
{
    //根据cuserid和nkey生成验证串
    ......
}

原网站

版权声明
本文为[丁亚涛]所创,转载请带上原文链接,感谢
https://blog.csdn.net/myyataoo/article/details/125984735