论坛首页 Java企业应用论坛

开源Java Web架构 有源码

浏览 30697 次
该帖已经被评为精华帖
作者 正文
   发表时间:2010-10-09  
SessionService.java:

public Map getSession(String id) {
MemCachedClient mc = this.getMemCachedClient();

Map session = (Map) mc.get(id);
if (session == null) {
session = new HashMap();
mc.add(id, session);
}
return session;
}
这只是获取session,如果session不存在,大可只返回空的hashMap,没有必要再mc.add(id, session);因为一旦你返回的hashMap中放入值的时候会自动调用saveSession,如果没有如果在获取session时发现没有session,将新建hashMap存入实际上没有任何意义还会浪费一次网络通信流量。因为你存入的空的session要么下次取还是取一个空hashMap回来,要么就会被一个新的有值的hashMap代替。总之第一次存入的空hashMap无用。这是我的见解!
0 请登录后投票
   发表时间:2010-10-09  
还有一个问题是UUID作为cookie的防攻击性如何?
根据你提供的程序,如果我自己伪造一个类似的UUID的cookie传入系统,系统发现这个cookie系统中没有相应的session,则系统会对应这个cookie值(自己伪造的UUID)建立session,这样做有没有什么后果?如果我自己只创建一个长度为10或者更短的,系统也接受?


我的做法是:
1、在用户登录前获取时创建临时session,在只读取的情况下,不写入memcached,如果有临时信息写入才写入memcached.此时的sid(SessionID有可能是用户自己伪造传入的).
2、在用户登录过后重新生成新的UUID(ticket),使原来的cookie失效,产生新的cookie写回客户端,可以防止用户自己伪造UUID(cookie)。
3、此时如果用户再次伪造一个UUID cookie过来,系统会发现此UUID cookie在memcached中不存在,则会重复1、2两个步骤直至用户使用了系统分配的UUID。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics