一尘不染

登录后如何刷新JSESSIONID cookie

tomcat

我正在研究的产品受到潜在客户的严格安全审核,他们为Tomcat在身份验证发生之前设置JSESSIONID
cookie感到不安。也就是说,Tomcat在我们的无状态登录页面加载时(但在登录之前)设置此cookie。

他们建议以下之一:

  1. 登录后发出新的JSESSIONID cookie
  2. 阻止在登录页面的第一位(即在身份验证发生之前)设置JSESSIONID cookie。

我一直在仔细阅读该站点上与JSESSIONID相关的所有内容,但找不到简单的答案。我只是希望一些想法。我为每个人最好的解决方案是:

  1. 登录后,通过复制所有属性,使旧会话无效,创建新会话,复制值,将其与请求关联,并希望它能够工作,来克隆会话(减去ID)。
  2. 在链的最末端创建一个Servlet过滤器,该过滤器会在最初加载“登录页面”之前去除JSESSIONID cookie。然后希望在没有设置JSESSIONID的情况下完成登录请求。

我得睡一会儿,但是早上会尝试这些。从比我聪明得多的人那里得到一些反馈或更好的建议,就像您一样!

无论如何,我将结果发布在这里,因为似乎很多其他人都想做类似的事情。


阅读 884

收藏
2020-06-16

共1个答案

一尘不染

在此之后,您不会刷新,而在之前。首先执行登录操作时,请执行以下操作:

HttpSession session = request.getSession(false);
if (session!=null && !session.isNew()) {
    session.invalidate();
}

然后做:

HttpSession session = request.getSession(true); // create the session
// do the login (store the user in the session, or whatever)

仅供参考,您要使用此技巧解决的问题是http://www.owasp.org/index.php/Session_Fixation

最后,您可以禁用自动会话创建,仅在真正需要时创建会话。如果您使用JSP,则可以通过以下方式进行操作:

<%@page contentType="text/html"
        pageEncoding="UTF-8"
        session="false"%>
2020-06-16