zoukankan      html  css  js  c++  java
  • 什么是 Cookie?

    问题:

    Http协议是一种无状态协议,希望服务器能记录一些客户端信息的时候 那么我们需要使用Cookie技术。

    什么是 Cookie?

    Cookie 是一些小数据, 存储于你电脑(客户端)上的文本文件中。

    当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。

    Cookie 的作用就是用于解决 "如何记录客户端的用户信息":

    当用户访问 web 页面时,他的名字可以记录在 cookie 中。

    在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。

    Cookie的属性

    name

    Cookie的名称

    value

    名称所对应的值

    path

    path:www.abc.com/aa/bb

    设置哪一些路径下的页面允许访问Cookie

    domain

    同源策略

    domain= '.baidu.com'

    所有以.baidu.com结尾的域名均可访问当前的cookie

    expires/Max-Age

    最大的生存时间/过期时间

    0表示随着浏览器的关闭而关闭

    正数 具体的时间 之后过期

    负数 永不过期

    secure

    表示当前的cookie只能使用Https 去传输 一定程度上会相对安全一些

    http

    httponly=true 表示当前的cookie只能用于http或者https的传输 不能再js中操作

    Size  

    cookie的大小

    cookie的本身所能存储的数据大小一般为4kb

    Js中使用Cookie

    设置Cookie的值

    function setCookie(cname,cvalue)

    {

    document.cookie = cname + "=" + cvalue ;

    }

    获取Cookie的值

    function getCookie(cname)

    {

    var name = cname + "=";

    var ca = document.cookie.split(';');

    for(var i=0; i<ca.length; i++)

    {

    var c = ca[i].trim();

    if (c.indexOf(name)==0) return c.substring(name.length,c.length);

    }

    return "";

    }

    检测Cookie的值

    function checkCookie()

    {

    var username=getCookie("username");

    if (username!="")

    {

    alert("Welcome again " + username);

    }

    else

    {

    username = prompt("Please enter your name:","");

    if (username!="" && username!=null)

    {

    setCookie("username",username,365);

    }

    }

    }

    JavaWeb中使用Cookie

    Cookie可能会带来的麻烦

    脚本攻击

    尽管cookie没有病毒那么危险,但它仍包含了一些敏感信息:用户名,计算机名,使用的浏览器和曾经访问的网站。用户不希望这些内容泄漏出去,尤其是当其中还包含有私人信息的时候。

    这并非危言耸听,一种名为跨站点脚本攻击(Cross site scripting)可以达到此目的。通常跨站点脚本攻击往往利用网站漏洞在网站页面中植入脚本代码或网站页面引用第三方法脚本代码,均存在跨站点脚本攻击的可能,在受到跨站点脚本攻击时,脚本指令将会读取当前站点的所有 Cookie 内容(已不存在 Cookie 作用域限制),然后通过某种方式将 Cookie 内容提交到指定的服务器(如:AJAX)。一旦 Cookie 落入攻击者手中,它将会重现其价值。

    建议开发人员在向客户端 Cookie 输出敏感的内容时(譬如:该内容能识别用户身份):

    (1)设置该 Cookie 不能被脚本读取,这样在一定程度上解决上述问题。

       (2)对 Cookie 内容进行加密,在加密前嵌入时间戳,保证每次加密后的密文都不一样(并且可以防止消息重放)。

      (3)客户端请求时,每次或定时更新 Cookie 内容(即:基于第2小条,重新加密)

      (4)每次向 Cookie 写入时间戳,数据库需要记录最后一次时间戳(防止 Cookie 篡改,或重放攻击)。

      (5)客户端提交 Cookie 时,先解密然后校验时间戳,时间戳若小于数据数据库中记录,即意味发生攻击。

    基于上述建议,即使 Cookie 被窃取,却因 Cookie 被随机更新,且内容无规律性,攻击者无法加以利用。另外利用了时间戳另一大好处就是防止 Cookie 篡改或重放。

    Cookie 窃取:搜集用户cookie并发给攻击者的黑客。攻击者将利用cookie信息通过合法手段进入用户帐户。

    Cookie 篡改:利用安全机制,攻击者加入代码从而改写 Cookie 内容,以便持续攻击。

  • 相关阅读:
    BZOJ 1257 余数之和
    BZOJ 1251 序列终结者
    BZOJ 2716 [Violet 3]天使玩偶
    BZOJ 2648 SJY摆棋子
    HDU 1007 Quoit Design
    BZOJ 3504 危桥
    BZOJ 1877 晨跑
    玩转Web之SSH--Heibernate (一)---第一个demo
    网页信息抓取进阶 支持Js生成数据 Jsoup的不足之处
    2013-09-16 构建C1000K的服务器(1) – 基础
  • 原文地址:https://www.cnblogs.com/qfchen/p/11547291.html
Copyright © 2011-2022 走看看