精华内容
下载资源
问答
  • Cookie安全问题解决方案

    千次阅读 2016-07-29 10:20:45
    面试被问到了登录时候用cookie的话,安全问题怎么解决?我基本没有答上来……自己的回答也是醉啊,当时紧张的大脑都不能思考了。所以自己重新学习了一下,先把弄懂了的解决方案记录下来,今后有更好的方法再更新...

    面试被问到了登录时候用cookie的话,安全性问题怎么解决?我基本没有答上来……自己的回答也是醉啊,当时紧张的大脑都不能思考了。所以自己重新学习了一下,先把弄懂了的解决方案记录下来,今后有更好的方法再更新博客。

    将用户的认证信息保存在一个cookie中,具体如下:
    1.cookie名:uid。推荐进行加密,比如MD5(‘站点名称’)等。
    2.cookie值:登录名|有效时间Expires|hash值。hash值可以由”登录名+有效时间Expires+用户密码(加密后的)的前几位 +salt”,salt是保证在服务器端站点配置文件中的随机数。
    这样子设计有以下几个优点:
    1.即使数据库被盗了,盗用者还是无法登录到系统,因为组成cookie值的salt是保证在服务器站点配置文件中而非数据 库。
    2.如果账户被盗了,用户修改密码,可以使盗用者的cookie值无效。
    3.如果服务器端的数据库被盗了,通过修改salt值可以使所有用户的cookie值无效,迫使用户重新登录系统。
    4.有效时间Expires可以设置为当前时间+过去时间(比如2天),这样可以保证每次登录的cookie值都不一样,防止盗用者 窥探到自己的cookie值后作为后门,长期登录。

    未完待续

    展开全文
  • cookie安全问题

    千次阅读 多人点赞 2018-12-25 16:16:55
    什么是cookie 指某些网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据(通常经过加密)。(注:此定义来自百度百科) cookie对于登录的效果 排除用户手动删除浏览器cookie以及cookie未过期的...

    什么是cookie

    指某些网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据(通常经过加密)。(注:此定义来自百度百科)

    cookie对于登录的效果

    排除用户手动删除浏览器cookie以及cookie未过期的情况下,用户如果在某网站登录过一次,下次访问这个网站,用户不需要输入用户名和密码就可以进入网站。

    cookie的生命周期

    创建cookie的时候,会给cookie指定一个值:Expire,它就是指定cookie的有效期,也就是cookie的生命周期,超出设置的这个生命周期,cookie就会被清除。如果给这个值Expire设置为0或者负值,那么这样的设置就是在关闭浏览器时,就会清除cookie,这种方式更加安全。

    为什么cookie不安全

    最大的原因是因为它存储在浏览器端(用户本地),一些别有用心的人能够通过浏览器截获cookie(脚本、利用工具抓取等)。

    cookie不安全的表现形式

    cookie欺骗

    但这时就会去考虑了,既然如此,为何不加密呢?加密后就算拿到cookie不是也没有用么?关键问题就在这里了,一些别有用心的人不需要知道这个cookie的具体含义,只需要将这个cookie向服务器提交(模拟身份验证),身份验证通过之后,就可以冒充被窃取cookie对应用户来访问网站,甚至获取到用户的隐私信息,对于用户的隐私造成非常严重的危害,这种方式就叫做cookie欺骗。

    cookie截获

    cookie以纯文本的形式在浏览器和服务器之间传递,在web通信时极容易被非法用户截获和利用。非法用户截获cookie后,在cookie的有效时间内重新发放给服务器,那么这个非法用户就拥有了这个合法用户的所有权限。

    Flash的内部代码隐患

    Flash中有一个getURL()函数,Flash利用它自动打开指定的页面。那么这个就意味着,你在观看Flash动画时,在Flash的内部可以悄无声息的打开一个极小的不易发现的包含特殊操作的页面,可以是木马,可以向远端输入当前cookie或者用户信息,这是非常危险的,由于这个是Flash内部的操作,所以网站无法禁止,要想避免,尽量打开本地防火墙以及访问正规网站。

    如何解决cookie安全性问题

    第一步:设置cookie有效期不要过长,合适即可

    第二步:设置HttpOnly属性为true

    可以防止js脚本读取cookie信息,有效的防止XSS攻击。

    第三步:设置复杂的cookie,加密cookie

    (1)cookie的key使用uuid,随机生成;
    (2)cookie的value可以使用复杂组合,比如:用户名+当前时间+cookie有效时间+随机数。
    这样可以尽可能使得加密后的cookie更难解密,也是保护了cookie中的信息。

    第四步:用户第一次登录时,保存ip+cookie加密后的token

    每次请求,都去将当前cookie和ip组合起来加密后的token与保存的token作对比,只有完全对应才能验证成功。

    第五步:session和cookie同时使用

    sessionId虽然放在cookie中,但是相对的session更安全,可以将相对重要的信息存入session。

    第六步:如果网站支持https,尽可能使用https

    如果网站支持https,那么可以为cookie设置Secure属性为true,它的意思是,cookie只能使用https协议发送给服务器,而https比http更加安全。


     

    展开全文
  • 1.问题描述 cookie未设置Secure标识:Cookie中有一个Sevure标识,如果设置了,那么这个cookie只会再https下被发送出去,https的传输时加密的,减少敏感cookie再http明文传输时泄露的可能性 2.解决方案 在web.xml...

    1.问题描述

      cookie未设置Secure标识:Cookie中有一个Sevure标识,如果设置了,那么这个cookie只会再https下被发送出去,https的传输时加密的,减少敏感cookie再http明文传输时泄露的可能性

    2.解决方案

     在web.xml中添加一个对controller的过滤器

        <filter>
            <filter-name>cookie</filter-name>
            <filter-class>com.skycloud.bigdata.bdtm.authority.CookieFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>cookie</filter-name>
            <url-pattern>*.do</url-pattern>
        </filter-mapping>

    CookieFilter.java

    package com.skycloud.bigdata.bdtm.authority;


    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.Locale;

    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    /**
     * Servlet Filter implementation class CookieFilter    
     * 
     * 解决 Cookie未设置HttpOnly  &&  Cookie未设置Secure标识  问题
     * 
     */
    public class CookieFilter implements Filter {

        /**
         * Default constructor. 
         */
        public CookieFilter() {
            // TODO Auto-generated constructor stub
        }

        /**
         * @see Filter#destroy()
         */
        public void destroy() {
            // TODO Auto-generated method stub
        }

        /**
         * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
         */
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest req = (HttpServletRequest)request; 
            HttpServletResponse resp = (HttpServletResponse)response;
            Cookie[] cookies = req.getCookies();
            if (cookies != null) {
                for (Cookie cookie : cookies) {
                    String value = cookie.getValue();
                    StringBuilder builder = new StringBuilder();
                    builder.append(cookie.getName()+"="+value+";");
                    builder.append("Secure;");//Cookie设置Secure标识
                    builder.append("HttpOnly;");//Cookie设置HttpOnly
    //                Calendar cal = Calendar.getInstance();//过期时间设置
    //                cal.add(Calendar.HOUR, 1);
    //                Date date = cal.getTime();
    //                Locale locale = Locale.CHINA;
    //                SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss",locale);
    //                builder.append("Expires="+sdf.format(date));
                    System.out.println("cookie--------------------------"+cookie.getName()+"##########"+value+";"+"##########"+cookie.getMaxAge());
                    resp.addHeader("Set-Cookie", builder.toString());
                    
                }
                
            }
            chain.doFilter(request, response);
        }

        /**
         * @see Filter#init(FilterConfig)
         */
        public void init(FilterConfig fConfig) throws ServletException {
            // TODO Auto-generated method stub
        }

    }
     

    在设置Set-Cookie的时候,用addHeader,如果用setHeader的话,就只是设置一个cookie值得头信息限制,其实在平时会有很多cookie里的主要参数信息需要限制,有的消息也会有不同的浏览器可以存储的时间,所有要一个一个遍历出来设置Cookie的信息。

    受益于https://blog.csdn.net/XiaHeShun/article/details/83339072,感谢

     

    展开全文
  • 最近项目对接口进行安全改造,需要用到一个Path=/XXX/的cookie值,但是本地开发环境会出现cookie丢失的问题,因为本地开发环境目录都是http://localhost:8000/home,不会包含XXX路径,这样请求就会丢失用于安全cookie. ...

    问题

    最近项目对接口进行安全改造,需要用到一个Path=/XXX/的cookie值,但是本地开发环境会出现cookie丢失的问题,因为本地开发环境目录都是http://localhost:8000/home,不会包含XXX路径,这样请求就会丢失用于安全的cookie.

    解决方案

    最简单粗暴的解决方案

    修改项目目录,添加一个XXX的文件夹,把开发环境的需要的静态资源和页面文件放到XXX文件夹下,开发环境下访问项目地址改成http://localhost:8485/XXX。显然这个方案有缺陷,如果cookie path 改变,我们又需要再次改变项目目录结构,可能还需要修改webpack配置(或者其他打包配置)

    nginx 代理的方式

    如果项目本地开发环境使用了nginx代理,那么只需要一行配置就可以轻松搞定,直接上代码

    location /{
        ...
        proxy_pass http://localhost:8000;
        proxy_cookie_path /XXX/ /;
        ...
    }
     
    #原理是代理转换了cookie的path,从/XXX/,转换成/。这样项目就不用做任何修改了。
    复制代码

    webpack-dev-server 解决方案

    了解前面两个方案之后,我们来看看重头戏,项目没有使用nginx作为代理,而是使用webpack-dev-server提供的代理功能,我们改怎么来配置呢?相信比较熟悉webpack-dev-server的同学都知道webpack-dev-server可以配置proxy,其实就是个代理的配置。先看一下最终的解决方案,在webpack.config.js中配置,如下

    devServer:{
        proxy: {
          "/api": {
            target: "http://localhost:8000",
            pathRewrite: {"^/api" : ""}
          },
          onProxyRes: function(proxyRes, req, res) {
              var cookies = proxyRes.headers['set-cookie'];
              var cookieRegex = /Path=\/XXX\//i;
              //修改cookie Path
              if (cookies) {
                var newCookie = cookies.map(function(cookie) {
                  if (cookieRegex.test(cookie)) {
                    return cookie.replace(cookieRegex, 'Path=/');
                  }
                  return cookie;
                });
                //修改cookie path
                delete proxyRes.headers['set-cookie'];
                proxyRes.headers['set-cookie'] = newCookie;
              }
            }
        }
    }
    
    复制代码

    由于查找了很多资料也没有查到简单的配置方式,我使用了onProxyRes的配置进行手动修改cookie。如果其他同学有其他简单一些的方式,还望不吝赐教!

    首先,同样是作为代理,我的思路就是参照nignx的思路一样,对cookie 的path进行一个转化,这样思路就明确了,查找配置,转换cookie,我感觉已经离胜利很近啦。

    果然我还是太年轻啊,以为剩下的事情肯定so easy了,结果我看了好几遍官网文档中proxy配置项,一个一个地查看,压根找不到那一项配置可以修改cookie 的path;然后我开始寻求百度,google的帮助,就这样查了半天,密密麻麻的浏览器标签,泪崩,难道真没办法了?还是大神们从来不这么玩啊。。。

    之后看到官网有一句话“The dev-server makes use of the powerful http-proxy-middleware package. Checkout its documentation for more advanced usages.”,茅塞顿开啊,原来更高级的使用方式可以去查看http-proxy-middleware,完整的配置大家可以自行查看和学习

    此处仅仅介绍几个配置

    • cookieDomainRewrite

      这个配置可以重写cookie 的domain,当看到这个配置时,眼睛都亮了,按理说也该有个cookiePathRewrite,我确认了好几遍,确实没有。

    • onProxyReq 代理请求事件,可以在这里对请求修改。

    • onProxyRes

      代理响应事件,可以在这里修改响应。

    function onProxyRes(proxyRes, req, res) {
        proxyRes.headers['x-added'] = 'foobar';     // add new header to response
        delete proxyRes.headers['x-removed'];       // remove header from response
    }
    复制代码

    重点来了,看到github上的这段demo,思路就有了,利用这个事件回调我们可以对set-cookie响应头进行重写,替换Path值。再贴一遍代码:

    onProxyRes: function(proxyRes, req, res) {
              var cookies = proxyRes.headers['set-cookie'];
              var cookieRegex = /Path=\/XXX\//i;
              //修改cookie Path
              if (cookies) {
                var newCookie = cookies.map(function(cookie) {
                  if (cookieRegex.test(cookie)) {
                    return cookie.replace(cookieRegex, 'Path=/');
                  }
                  return cookie;
                });
                //修改cookie path
                delete proxyRes.headers['set-cookie'];
                proxyRes.headers['set-cookie'] = newCookie;
              }
            }
    复制代码

    此处使用了proxyRes对象进行操作,遍历proxyRes.headers['set-cookie'],替换相应的Path值,删除原来的set-cookie,再重新设置一遍即可。

    至此,我们可以在webpack-dev-server的proxy中来进行配置,解决开发环境下cookie丢失的问题。

    参考:

    https://github.com/nodejitsu/node-http-proxy

    https://github.com/chimurai/http-proxy-middleware

    转载于:https://juejin.im/post/5a9e6592f265da23870e59eb

    展开全文
  • 单点登录与权限管理本质,前一篇文章介绍了单点登录概念,以CAS协议的基本流程为例讲解了系统间的交互过程,过程中,cookie的设置和传输涉及的比较多,如何保证cookie安全性,是这篇文章要介绍的。 该系列的完整...
  • 最近项目对接口进行安全改造,需要用到一个Path=/XXX/的cookie值,但是本地开发环境会出现cookie丢失的问题,因为本地开发环境目录都是http://localhost:8000/home,不会包含XXX路径,这样请求就会丢失用于安全cookie. ...
  • Cookie中SameSite的问题解决办法

    千次阅读 2020-09-09 16:27:27
      由于登录时使用到了cookie,项目又是前后端分离,所以在跨域前提下解决跨域问题后可以正常发送cookie。但是在Chrome浏览器高版本中,它为了防止第三方网站盗用cookie实现CSRF攻击,所以谷歌采用设置cookie的same...
  • iframe 跨域访问session/cookie丢失问题解决方法
  • 今天在做前后端分离项目的时候遇到了这样一个问题。 设置了与跨站点资源http://www.****.com/关联的cookie,但没有设置' SameSite '属性。在未来的Chrome版本中,只有当跨站请求设置为“SameSite=None”和“Secure”...
  • 1、将嵌套页面的url单独窗口访问,一切正常(页面显示正常,页面请求正常获取cookie信息),排除iframe页面问题。 2、进一步尝试,将这个带有链接的iframe放在一个全新的html文件中也不能正常访问,排除当前系统的...
  • 跨域cookie 解决方案

    千次阅读 2019-02-28 14:55:35
    cookie 在项目里经常使用,一个cookie在由一个服务器产生在另一个服务器里需要用到,这就产生了cookie的跨域问题。 由于浏览器安全策略,cookie只能在同一域名产生和使用。 看一个cookie的组成: 可以看到首先是...
  • iframe中跨域cookie丢失问题java解决

    千次阅读 2016-03-09 22:22:55
    问题来源:  两个WEB项目整合,我的项目功能整合到一个大的WEB中,...才使用cookie+缓存的方式来模拟session。在整合后发布到线上没有注意浏览器的问题,测试好了chrome和firefox后就验收通过全面发版到线上。但是之后
  • Cookie安全性分析

    千次阅读 2019-04-22 22:49:58
    浅谈cookie安全性 摘要 HTTP State Management Mechanism(HTTP状态管理机制)一文中,定义了HTTP Cookie和Set-Cookie头字段。HTTP服务器利用这种头字段,在HTTP用户代理(浏览器)中存储当前状态,使得在大多数...
  • 单点登陆cookie安全详解

    千次阅读 2017-12-09 23:00:42
    sso单点登陆保证cookie安全
  • COOKIE安全与防护

    万次阅读 2017-05-28 21:08:18
    三、 COOKIE安全分析  四、 COOKIE惯性思维  五、 COOKIE防护  六、 总结  七、 参考文献: 15 摘要:Cookie是一小段文本信息,只能保存字符串,伴随着用户请求和页面在Web服务器和浏览器间传递,...
  • 解决cookie跨域访问

    千次阅读 2017-02-16 16:17:33
    比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入cookie(记录着用户上下文信息),应用想要获取门户下的cookie,这就产生了cookie跨域的问题。  v二、介绍一下cookie...
  • 对于IE来说(默认安全级别下),iframe、img、link等标签都是只发送session cookie(又叫 第一方cookie),拦截本地cookie发送(又叫第三方cookie)。当这些标签跨域引用一个页面,实际上是发起了一次GET请求。 ...
  • 问题解决: 过滤器处理一下就行了 CookieFilter.java import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Local...
  • 因为 mac os(safari,iphone(h5),ipad 等) 安全策略的问题,在设置安全 cookie 的时候,在验证图形验证码的时候,会出现储存不了 cookie 的情况,以至于后端接口验证不能通过。 support.apple.com/zh-cn/guide...
  • Cookie的传递流程及安全问题

    千次阅读 2015-07-29 11:22:14
    Cookie在英文中是小甜品的意思,而这个词我们总能在浏览器中看到,食品怎么会跟浏览器扯上关系呢?在你浏览以前登陆过的网站时可能会在网页中出现:你好XX,感觉很亲切,就好像是吃了一个小甜品一样。 这其实是通过...
  • 提高COOKIE安全性--相关解决方案   网络上常见方案是:   给Cookies加个加密算法。 给Cookies加个时间戳和IP戳,实际就是让Cookies在同个IP下多少时间内失效。 最终使用MD5来MAC签名防止篡改……但这样...
  • 问题 Axios默认设置跨域不使用Cookie/Session的 解决方法 前端: 全局设置 在axios.js中添加以下代码 组件设置 如不想全局设置,在需要传递Cookie/Session的axios请求中加入以下代码 "withCredentials:true"即可 ...
  • 最近几天屡次出现登录CSDN账户登陆问题,具体的问题是:在以往保留...2. 将浏览器的历史记录给清除掉,也依旧不能解决问题 3. 最后我将浏览器里的上网痕迹给设置清理了一下,添加了清理Cookies这一项,结果再进入登录
  • cookie 跨域问题

    万次阅读 2018-06-12 13:56:38
    cookie 跨域访问 一、 前言 随着项目模块越来越多 ,很多模块现在都是独立部署, 模块之间的交流有事可能会通过..., 应用想要回去门户下的cookie , 这就产生了cookie跨域的问题 。 二、 cookie介绍 c...
  • java操作cookie 加密安全问题

    千次阅读 2017-01-26 01:55:41
    解决这个问题,就要在Cookie中附加一项信息,这个信息需要具有以下特性:1、和该用户一一对应;2、伪 造难度大。这些内容和用户名一起,以Cookie的形式发送给用户的浏览器。并且,服务器必须能够记住这项内容,...
  • cookie安全配置相关漏洞修复

    千次阅读 2017-09-23 15:47:32
    表示在设置cookie的时候,没有设置相应的expire,有做安全扫描的时候,就有可能报出这个问题。修复这个问题,就需要设置相应的expire信息。php中需要修改配置文件php.ini,找到“session.cookie_lifetime”这一行,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,298
精华内容 43,719
关键字:

如何解决cookie安全问题