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

由于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. mysql里group by按照分组里的内容的排序

    得到一张表里按u_id分组,按count(id)排序,每个分组的pub_time最大的哪些记录,只取count(id)最大的4条 select a.u_id,a.name,a.u_name,a.id, ...

  2. [转载] ffmpeg超详细综合教程——摄像头直播

    本文的示例将实现:读取PC摄像头视频数据并以RTMP协议发送为直播流.示例包含了 1.ffmpeg的libavdevice的使用 2.视频解码.编码.推流的基本流程 具有较强的综合性. 要使用liba ...

  3. Java Web 乱码

    1.mySql编码 2.jdbc编码 http://www.blogjava.net/NicholasEcho/archive/2008/11/03/238310.html ----- 1.HttpG ...

  4. 纠结的ARC

    xcode不断进步,在xcode4中引入了ARC的概念.您用或者不用它就在那里,于是有了本文:如何在未使用arc的工程中引入一个使用了arc特性的文件,如何在arc工程中引用未使用arc的文件.其实说 ...

  5. [转] VS 整合NUnit进行单元测试

    Jeff Wong原文 5分钟实现VS2010整合NUnit进行单元测试 1.下载安装NUnit(最新win版本为NUnit-2.6.0.12051.msi) http://www.nunit.org ...

  6. Gridview点击Edit编辑未update和cancel后的问题

    在使用GridView时无意中发现一个问题: 第一步:点击列表中的某一行的"Edit"(例如第一行数据), 第二步:点击下一页,于是在下一页数据加载完成后就会看到对应的行(与第一步 ...

  7. Microsoft Visual Studio Web 创作组件安装失败的解决方法

    在网上查一下说是Office2007的问题.我把Office2007卸载了还是不行. 然后用Windows Install Clean Up工具清理,还是不行. 郁闷了.然后在安装包中的下面路径下找到 ...

  8. 【转】Linux mount/unmount命令

    转自:http://www.cnblogs.com/xd502djj/p/3809375.html 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有:-a 安装在/etc/fs ...

  9. python中的文件

    Python文件 1.    概述 文件对象不仅可以用来访问普通的磁盘文件,也可以访问任何其他类型抽象层面上的文件. 内建函数open()以及file()提供了初始化输入输出(I/O)操作的通用接口. ...

  10. 数往知来 ASP.NET 表单的提交_url传值_重定向 <十八>

    一.表单提交时注意 如果是以get方式提交数据的时候,在接收时是用QueryString方式进行接收 如果是以post请求数据时在接收时是用Form进行接收 为什么么要这样做呢?我们用Request[ ...