不要在公共场登陆 自己重要的用户名和密码; 不用的时候,【关闭浏览器】,只点【退出】,还是会有安全隐患。--没有绝对的安全

由于http的无状态性,总不能每次访问页面都要输入用户名和密码,所以为了保持状态,cookie就用到了。session本质也是生成唯一标示 sessionid存到cookie里面来进行用户状态保持,辨别。

那么,cookie是存在客户端的,如果被别有用心的人,【查看元素】,跨站攻击,流氓木马病毒等获取到 这个标示的cookie,则就可以使用这个cookie通过后台的校验,看到真实用户的信息。  {例如 下方 用来攻击的页面}

解决方案

cookie加密, 加密虽然看不懂cookie,但根本就不需要知道cookie是什么含义,请求的时候把【截取】到的cookie放入请求,则就可以绕过后台的判断,获取真实用户的信息,所以单纯加密无用。

cookie+ip等信息加密,可以抵挡大多数的恶意攻击,   因为  虽然获取到了 cookiie ,但是  恶意者的ip不和真实用户的相同,则可以校验出来,防止欺骗

但,网上查看好像ip也是可以被冒充的。还是有很大的安全隐患

最终的解决方案:

cookie + ip + 动态

请求正确一次,就清空一次,再重新赋值一个  唯一标示,那么   就算别人  窃取到了 cookie,只有在【用户  此次被获取cookie的请求,与下次请求  之前的时间     那个cookie才会起到欺骗效果。配合 ip等客户端的标示,应该可以  避免 cookie欺骗】

Perfect

cookie欺骗

用来攻击的页面

   <input type="text" name="name" value=""  placeholder='cookie名称' id='cn'/>
    <input type="text" name="name" value=""  placeholder='cookie值'  id='cv'/>
    <input type="button" name="name" value="cookie欺骗登陆" onclick='login()' />

<script>
 
    function login() {
        document.cookie = document.getElementById("cn").value + "=" + document.getElementById("cv").value;
        alert(document.cookie);
        window.location.href = "http://myjs.com/trick/index.aspx";//要攻击cookie欺骗登陆的网站
    }
//这里模拟只有一个cookie

</script>

登陆页面前台

    <form action="normal.aspx" method="post" runat='server'>
 
    <input type="text" name="name" value="" placeholder='请输入用户名 abc ' />
    <input type="password" name="pwd" value="" placeholder='请输入密码 123' />
    <input type="submit"  value="登陆"  />
 
    </form>
登陆页面后台

public partial class trick_normal : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            SetLogin();
        }
 
    }
 
 
    private void SetLogin()
    {
        string name = Request["name"];
        string pwd = Request["pwd"];
 
        if (name == "abc" && pwd == "123")//如果用户密码都正确
        {
            SafeTest.CheckLogin c = new CheckLogin();
 
            string userinfo = "name=abc|pwd=123";//模拟需要保存的用户信息
            c.SetSessionId(userinfo);
 
            Response.Redirect("index.aspx");
        }
        else
        {
            //登陆失败的各种处理,这里简单response
            Response.Write("登陆失败!");
            Response.End();
        }
 
 
 
 
    }

}

登陆后可访问的页面前端

  <div>
    登录可见
    </div>

登陆后可访问的页面后端

public partial class trick_index : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        CheckLogin c = new CheckLogin();
        c.Check();
 
        //展示页面
 
 
    }

}

登陆信息设置的类

namespace SafeTest
{
 
 
    public class CheckLogin
    {
        //验证是否登陆
        public void Check()
        {
            System.Web.HttpCookie cacheKEy = System.Web.HttpContext.Current.Request.Cookies["sessionId"];
            if (cacheKEy != null)
            {
                if (System.Web.HttpContext.Current.Cache[cacheKEy.Value] != null)
                {
//【这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里这里】
                    //使用登录信息
                    object userinfo = System.Web.HttpContext.Current.Cache[cacheKEy.Value];
                    SetSessionId(userinfo);
                    System.Web.HttpContext.Current.Cache.Remove(cacheKEy.Value);
 
                }
                else
                {
                    System.Web.HttpContext.Current.Response.Redirect("normal.aspx");
                }
            }
            else
            {
                System.Web.HttpContext.Current.Response.Redirect("normal.aspx");
            }
        }
 
 
 
 
        public  void SetSessionId(object obj)
        {        //设置 session ,  这里通过  cookie+guid+cache来保持会话标示 
 
            string guid = Guid.NewGuid().ToString();
         
            HttpCookie hc = new HttpCookie("sessionId", guid);
            System.Web.Caching.Cache ch = new System.Web.Caching.Cache();
 
            //Cache.Insert("key1", myFrequentlyAccessedData, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(30)); 滑动过期时间
 
            //System.Web.HttpContext.Current.Cache.Insert(guid,obj,null,TimeSpan.Zero,DateTime.Now.AddMinutes(20)); 绝对过期时间
 
            System.Web.HttpContext.Current.Cache.Insert(guid, obj, null, System.Web.Caching.Cache.NoAbsoluteExpiration,TimeSpan.FromMinutes(20));
 
        
 
 
            System.Web.HttpContext.Current.Response.Cookies.Add(hc);
        }
 
 
    }
}

彻底解决cookie欺骗(有问题)的更多相关文章

  1. 解决cookie跨域访问

    一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...

  2. 解决cookie跨域访问.2

    v一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入 ...

  3. 通过COOKIE欺骗登录网站后台

    1.今天闲着没事看了看关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)的知识,xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语 ...

  4. cookie欺骗

    1.什么是cookie欺骗改变cookie的值,发给服务器,就是cookie欺骗.正常情况下,受浏览器的内部cookie机制所限,每个cookie只能被它的原服务器所访问,我们操作不了原服务器. 2. ...

  5. asp中cookie欺骗/注入原理与防范

     一直以来sql注入被广泛关注,也有专门的防注系统代码.发现,如果代码不严谨也会有cookie欺骗/注入的情况.原来, 防注入系统没有注意到 Cookies 的问题!这里以ASP为例,分析一下cook ...

  6. 用wget实现cookie欺骗

    用wget实现cookie欺骗 . 分析登录界面的html代码 页面在 http://bbs.linuxeden.com/ <form. id="loginform" met ...

  7. bugku题目“cookie欺骗”

    先上成功截图 题目写的cookie欺骗,但其实是一道考察写脚本能力和代码审计类的题目,首先观察开始的页面 可以看到只有这一串字母,粗略观察可以认为这绝对不是密码,而是胡乱写上的字符,在观察页面源代码后 ...

  8. 进阶——scrapy登录豆瓣解决cookie传递问题并爬取用户参加过的同城活动©seven_clear

    最近在用scrapy重写以前的爬虫,由于豆瓣的某些信息要登录后才有权限查看,故要实现登录功能.豆瓣登录偶尔需要输入验证码,这个在以前写的爬虫里解决了验证码的问题,所以只要搞清楚scrapy怎么提交表单 ...

  9. P3P解决cookie存取的跨域问题

    最近在做一个流量统计的东西的时候,偶然发现IE在对iframe里面的页面写Cookie的时候有一些安全限制,导致读取Cookie不成功,找了好长时间的解决办法,重要找到如下的办法: 1.页面里的COO ...

随机推荐

  1. 剑指offer-第二章排序之年龄排序

    题目:对某个公司的人的年龄(0-99)进行排序,该公司的总人数为几万人.要求时间复杂度为O(n),可以辅助O(n)的空间. 思路:实现函数为void SortAge(int ages[],int le ...

  2. OpenGL ES之GLSurfaceView学习一:介绍

    原文地址::http://120.132.134.205/cmdn/supesite/?uid-5358-action-viewspace-itemid-6527 GLSurfaceView是一个视图 ...

  3. MyEclipse8.5注册码 到2015年

    Subscriber: onechenProduct ID: E3MP (MyEclipse Professional Subscription)License version: 3.0Full Ma ...

  4. 包装类-Character

    1,isDigit();是否是数字 char c = '1'; boolean bool = Character.isDigit(c); System.out.println(bool);//true ...

  5. hdu 4301(基本dp)

    题意:就是给你一块2*n的巧克力,让你把它分成x块,并且每一个单位的巧克力各不相同,问有多少种分法? 分析:用dp[i][j][k],表示到巧克力的第二列时,巧克力被分成了j快,k用来表示第i列上下两 ...

  6. mysql优化SQL语句的一般步骤及常用方法

    一.优化SQL语句的一般步骤 1. 通过show status命令了解各种SQL的执行频率 mysqladmin extended-status 或: show [session|global]sta ...

  7. C++容器和算法

    转自:http://www.cnblogs.com/haiyupeter/archive/2012/07/29/2613145.html 容器:某一类型数据的集合. C++标准顺序容器包括:vecto ...

  8. js中DOM集合的动态特性

    先引出一个问题:通过调用getElements*()这样的方法返回来类(伪)数组,能对其本身的元素进行排序吗? 答案是不能,因为这些对象的都是NodeList . NamedNodeMap 或 HTM ...

  9. html --- SVG --- javascript --- 旋转矩形

    可缩放矢量图形(英语:Scalable Vector Graphics,SVG)是基于可扩展标记语言(XML), 用于描述二维矢量图形的一种图形格式.SVG由W3C制定,是一个开放标准. 在 Inte ...

  10. 得到python某个模块的路径

    #-*-coding:utf-8-*- # 导入imp模块 import imp # 打印出MySQLdb模块 print imp.find_module("MySQLdb")