cookies登陆的安全性

来源:互联网 发布:mac翻墙软件2016 编辑:程序博客网 时间:2024/06/05 01:24

cookies登陆的安全性
一、cookie基本特性:
  1、是以键值对存放。
  2、cookie存在在硬盘的临时文件是可以被修改的。
     如IE,它一般是存放在操作系统的安装分区目录下:C:\Users\hp\AppData\Local\Microsoft\Windows\Temporary Internet Files
  3、cookie文本是不可以直接修改的。
二、cookie篡改或者是欺骗,主要通过以下方式进进行的:
1、本地修改,如:将用户名存放在cookie里来判断用户是登陆。这样可以通过工具直接修改存放在cookie中的用户名,从而达到欺骗目的。
2、cookie里存放的数据向服务器传输时,可以通过获取cookie里数据,并且进行修改。从而达到欺骗的目的。
3、一个比较基础欺骗的举例说明:
  比如说cookie存放着一个普通用户,如果管理员账号是admin,哪么将cookie里存放的用户修改成admin就达到了欺骗的目的。
三、如何防止cookie欺骗:
    假设cookie里主要存放用户的和客户端的相关信息。
  cookie的值是 = (username+过期时间+md5(username+ip+过期的时间))的Base64编码
  判断用户是否登陆时,获取cookie的值,进行字符串分割,判断用户名、获取的客户端IP、过期时间与加密的md5字符串进行比对,如果比对成功,说明用户已经登陆。
    用户登陆示例代码如下:
    string username = txtUserName.Text;
        string pwd = txtPwd.Text;
        //判断用户核对成功后,对cookie的保存
        string ip = Request.UserHostAddress; //获取客户端IP
        DateTime expiresDate = DateTime.Now.AddMinutes(30);//获取当前时间
        StringBuilder sBuilder = new StringBuilder();
        sBuilder.Append(username).Append("-");
        sBuilder.Append(expiresDate).Append("-");
        //通过MD5不可逆加密,方面后面对这些数据进行核对。从而防止它人通过cookie破解网站。
        //同时这也起到不需要将要核对的数据放到数据库,从而提交了效率,节省了存储空间。
        sBuilder.Append(MD5Encode(username + ip + expiresDate));

        //将用户相关信息保存在cookie里
        HttpCookie cookie = new HttpCookie("user");
        //ToBase64String的好处,处理特殊字符,有些字符是无法存储在cookie中的,当然所有字符显示不是它本身,起到了一定的安全作用
        cookie.Value = Convert.ToBase64String(Encoding.UTF8.GetBytes(sBuilder.ToString()));
        cookie.Path = "/";
        cookie.Expires = DateTime.Now.AddMinutes(30);//设置cookie过期时间为30分钟
        Response.Cookies.Add(cookie);
  判断用户是否登陆示例代码:
  if (Request.Cookies["user"] != null)
        {
            //获取cookie里存放的用户的相关信息
            byte[] cookiesByte = Convert.FromBase64String(Request.Cookies["user"].Value);
            String cookieValue = Encoding.UTF8.GetString(cookiesByte);

            //分割成数组
            String[] objArry = cookieValue.Split('-');
            //获取客户端IP,防止客户ip被修改
            string cip = Request.UserHostAddress;
            if (MD5Encode(objArry[0] + cip + objArry[1]) == objArry[2])
            {
                //说明cookies的值是安全的,没有被篡改
            }
            else
            {
                //说明cookie被修改或是篡改
            }
        }
  //md5加密代码如下:

     //对md5进行加密的方法
     public string MD5Encode(string str)
    {

        return "";
     }

 


 

原创粉丝点击