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

由于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. python练习程序(c100经典例17)

    题目: 输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. def foo(a): l=len(a); letters=0; space=0; digit=0; others=0; f ...

  2. phpcms二级菜单

    二级 {pc:content action="category" catid="0" siteid="$siteid" order=&quo ...

  3. Linux多线程下载工具Axel

    一般情况,在 Linux 下我们习惯于用 wget 下载,但该工具的缺点就是无法进行多线程下载,所以往往有时候速度不够快.这里介绍的 Axel,是 Linux 下一款不错的 HTTP 或 FTP 高速 ...

  4. click和onclick的区别

    onclick是绑定事件,click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,下面有个示例,大家可以看看   Html代码 ? 1 2 3 4 5 6 7 8 9 1 ...

  5. 安卓 Pickers(选择器)

    概述 安卓提供了现成的对话框,让用户选择一个时间或日期.每一个选择器控制时间(小时,分钟,AM/PM)或日期(月,日,年)的每一部分的选择.使用这些选择器帮助 确保用户正确的,格式化的,和适合的选择一 ...

  6. 【转】Xcode的Architecture参数的意思

    iOS的App现在基本都是用llvm在编译,Xcode也提供了各种设置帮助你进行编译参数的设定.里面有一项就是设定编译的体系结构,涉及到的参数包括:Architectures.Valid Archit ...

  7. 嵌入式 VFS: Cannot open root device "mtdblock2" or unknown-block(2,0)

    系统启动后,虽然nand驱动表现正常,但是最后挂载rootfs时候出错: Kernel command line: root=/dev/mtdblock2 rw init=/linuxrc conso ...

  8. hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online

    很坑的一道题,读了半天才读懂题,手忙脚乱的写完(套上模板+修改模板),然后RE到死…… 题意: 题面上告诉了我们这是一棵二叉树,然后告诉了我们它的先序遍历,然后,没了……没了! 反复读题,终于在偶然间 ...

  9. [转]Linux之type命令

    转自:http://codingstandards.iteye.com/blog/831504 用途说明 type命令用来显示指定命令的类型.一个命令的类型可以是如下之一 alias 别名 keywo ...

  10. python中类的总结

    1. 类中的方法 在类里主要有三种方法: a.普通方法:在普通方法定义的时候,需要一个对象的实例参数,从而在类中定义普通方法的时候,都必须传送一个参数self,那么这个参数也就是object b.类方 ...