在开发网站时,经常需要通过保存在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;elsereturn false;}
}public string CreateCookieCheck(string cuserid, int nkey)
{//根据cuserid和nkey生成验证串......
}
本文发布于:2024-01-27 19:49:46,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063561892280.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |