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

由于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. Android telnet RPi 2B

    /************************************************************************* * Android telnet RPi 2B * ...

  2. open行情

    日k线 只能取8年 1分钟K线 只能取五天 前复权K线出现负数的股价 后复权K线会出现上千的股价

  3. Maven 安装Jar包到本地仓库

    开始cmd: 例1: mvn install:install-file -DgroupId=Issues -DartifactId=beautyeye -Dversion=3.5 -Dpackagin ...

  4. [转载] ubuntu开机直接进入命令行模式

    最近安装了ubuntu12.04来使用,每次都进入unity界面再进入命令行很不方便. 不需要界面的话,可以通过设置来开机进入命令行模式. 今天提供两中比较好的方法.经本人测试两中方法都可使用. [1 ...

  5. 收缩Oracle数据文件

    最近有网友提到收缩Oracle数据文件的问题,这是DBA经常碰到的一个常见问题.通常我们需要收缩相应的数据文件以减少来自磁盘空间的压力以及提高数据库的整体性能.但这并非对于所有情形都是适用的,尤其是生 ...

  6. js仿手机端九宫格登录功能

    js仿手机端九宫格登录功能 最近闲来无事把以前无聊时开发的小东西拿出来和大家分享下,写的不好的请指出,我会及时修改.谢谢. 功能及方法逻辑都注释在代码中.所以麻烦大家直接看代码. 效果如下: 话不多说 ...

  7. ECSide标签属性说明之<ec:column>

    <ec:column>标签 ◆ 属性: columnId描述: 单元格的id,相当于<td>的id属性 ◆ 属性: title描述: 列在列表表头里显示的名称. ◆ 属性: p ...

  8. 序列化、反序列化和transient关键字的作用

    引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口, ...

  9. 第二个UI脚本--Python+selenium之unittest+HTMLtestRunner及python的继承

    前面有一篇对于常见元素的识别和操作的python自动化脚本,这一篇就接着聊下python的类继承,已经它的第三款unittest框架,和报告收集包HTMLtestRunner的应用. 还是直接上代码吧 ...

  10. 转--优化临时表使用,SQL语句性能提升100倍

    转自:http://www.51testing.com/html/01/n-867201-2.html [问题现象] 线上mysql数据库爆出一个慢查询,DBA观察发现,查询时服务器IO飙升,IO占用 ...