`
skzr.org
  • 浏览: 371782 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Tomcat7新特性?cookie HttpOnly的那些事(sessionid获取麻烦了)

    博客分类:
  • J2EE
阅读更多

环境:

tomcat6和tomcat7,jdk1.6,j2ee应用,一个applet运行在浏览器中,网站有验证机制

现象:

  1. 成功登录系统后
  2. tomcat6下:applet可以正常运行;
  3. tomcat7下:applet运行失败,在加载jar时就失败了

分析:

  1. 查看applet的java控制台:在tomcat6下请求jar时会自动带上JSESSIONID,而在tomcat7中不会导致通不过验证机制
  2. 打开wireshark监控通讯,发现,tomcat7下设置cookie为:比tomcat6下多了个HttpOnly
    Set-Cookie: JSESSIONID=B7587AE3765290179B8CE4027545391F; Path=/cems2; HttpOnly
  3. 看来就是因为这个导致applet获取浏览器的cookie值时,被浏览器拒绝了

解决:

  1. 设置应用禁止HttpOnly或身份标识Cookie创建时创建禁止Cookie:useHttpOnly=false即可
    然后安全性自己控制:如cookie加密等
    <?xml version="1.0" encoding="UTF-8" ?>
    <Context path="/${tomcat.deployName}" docBase="${basedir}/WebRoot" useHttpOnly="false"/>
     
  2. 数字签名不可行,注意applet plugin jvm初始化时,就会去网站检查jar,实际上这个时候还只是jvm plugin load class——我们无法控制,所以也无法动作
  3. jar的访问不验证,签名jar,然后在applet启动时,强制读取cookie(通过签名了),存储cookie到applet环境中——被证明依然不可行,官方好像说jdk1.6u16就解决了这个问题,不过貌似我这里不行ubuntu 10.10 ff和chrome都测试了,试想如果真的可以,那么任何plugin也可以读取,安全性又回到了httponly=false的情形了。
  4. 主动发送cookie,通过在页面设置cookie做为paramters传递给plugin,然后所有访问服务器资源的连接都主动设置此cookie即可,经过验证是可行的。
  5. 权衡1和4,还是采用方法1最快最容易实施
  6. 或启用useHttpOnly=true然后,用户登录后设置cookie[appletkey][HttpOnly=false],所有applet的访问验证都通过appletkey cookie值进行.

分享到:
评论
4 楼 skzr.org 2012-07-05  
现在都jdk7u5了,不知道这个有没有解决。但是查资料说httponly=true,那么浏览器将禁止一切插件获取此cookie。
3 楼 skzr.org 2012-07-05  
asdfghhong 写道
Hi,
我想问下最后一条 “或启用useHttpOnly=true然后,用户登录后设置cookie[appletkey][HttpOnly=false],所有applet的访问验证都通过appletkey cookie值进行.”
能够详细的说下在程序里面怎么设置吗,我现在急需解决这个applet的问题。


* 还是采用方法1最快最容易实施 *

"或启用useHttpOnly=true然后,用户登录后设置cookie[appletkey][HttpOnly=false],所有applet的访问验证都通过appletkey cookie值进行."——意思是,服务器通过此appletkey去寻找对应的session,而不是通过jsessionid,这个比较复杂。

1. 首先用户打开applet页面时,服务器根据sessionId生成一个appletkey的值形成一对一可逆映射,且这个cookie的httponly=false
1. 因为这个cookie[appletkey].httponly=false,当applet访问服务器时会传递到服务器,服务器根据这个值找到实际对应的session进行绑定。

其实我觉得方法1就可以了,毕竟httponly只能防君子,那么何必整这么复杂呢。
2 楼 asdfghhong 2012-07-05  
Hi,
我想问下最后一条 “或启用useHttpOnly=true然后,用户登录后设置cookie[appletkey][HttpOnly=false],所有applet的访问验证都通过appletkey cookie值进行.”
能够详细的说下在程序里面怎么设置吗,我现在急需解决这个applet的问题。
1 楼 skzr.org 2011-03-26  
呵呵,如果大家解决了cookie httponly带来的问题,我们一起讨论讨论

希望官方可以给出好的解决方案

相关推荐

    Windows7 + Nginx + Memcached + Tomcat 集群 session 共享

    之后,无论用户请求哪个Tomcat实例,只要session ID相同,其他实例都能从Memcached中获取session数据,从而实现session共享。 **5. 注意事项** - 确保所有服务器之间网络通信正常,Memcached服务稳定运行。 - 由于...

    tomcat集群与会话共享

    - **会话持久化**:在Nginx配置中添加`hash $cookie_session`指令,可以根据用户会话ID(通常存储在cookie中)保持会话一致性。 ``` location / { proxy_pass http://tomcat_cluster; proxy_set_header Host $...

    bboss会话共享培训文档

    安全性方面,bboss会话共享通过在客户端基于cookie机制存储sessionid,并设置cookie的HttpOnly属性来防止XSS攻击窃取sessionid,通过设置Secure属性并在HTTPS环境下传输来防止sessionid被窃取。同时,还提供会话信息...

    SpringMVC-Mybatis-Shiro-redis-master 权限集成缓存中实例

    * 我们平常用的获取上一个请求的方式,在Session不一致的情况下是获取不到的 * String url = (String) request.getAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE); */ 三、删除了配置文件中的cookie写入域...

    基于jsp和Servlet开发的新闻发布系统

    开发者需要对输入进行验证,使用预编译的SQL语句(PreparedStatement),设置HttpOnly Cookie等措施来保护系统安全。 **7. 模板引擎** 为了提高代码可读性和可维护性,有时会在JSP之上使用模板引擎(如FreeMarker...

Global site tag (gtag.js) - Google Analytics