【问题标题】:Creating a new JSESSIONID after authentication身份验证后创建新的 JSESSIONID
【发布时间】:2012-09-28 08:23:10
【问题描述】:

当用户点击Portal(可能是LiferayJboss Portal..)的登录页面时,JSESSIONID cookiecontainer创建。在登录页面中输入凭据后,相同的JSESSIONID 会被继承。

在这里,最终用户将在获得身份验证之前知道JSESSIONID(通过在登录页面中检查JSESSIONID)。这将增加网站被黑客入侵的脆弱性,因为在获得身份验证之前就可以知道JSESSIONID

post 建议在身份验证后使用不同的JSESSIONID

那么,创建一个新的 JSESSIOND 可以通过使用Portal 服务器来实现(我正在使用Liferay CE 6.0),还是必须由 Web 应用程序开发人员处理?如果必须由 Web 应用程序开发人员处理,最好的方法是什么? request.getSession(true) 是唯一的选择??如果我需要在身份验证后指示Liferay 创建一个新的JSESSIONID 怎么办?

【问题讨论】:

    标签: security liferay-6 jsessionid


    【解决方案1】:

    这看起来很像我很久以前为 Liferay 5.2.5 解决的会话固定问题。该解决方案包括创建一个自定义 Tomcat Valve,它将强制一个新的会话 ID。因此,该解决方案并不是针对 Liferay 的,而是取决于您是否使用 Tomcat。

    我怀疑将我的旧解决方案适应新的 Liferay/Tomcat 组合应该不会太难。您可以在我的旧博客和当前未维护的博客中找到有关我的解决方案的必要信息(如果我有更多时间...):Fixing session fixation in Liferay

    【讨论】:

      【解决方案2】:

      这里的问题不在于用户知道会话ID(用户总是知道它,它是由他的浏览器发送的)。攻击场景是用户在注销时单击已经嵌入 JSESSIONID 的链接,然后进行身份验证,此会话成为登录会话。现在,最初创建链接的人可以使用相同的会话来充当用户。更多详情https://en.wikipedia.org/wiki/Session_fixation

      所以是的,在用户进行身份验证后,使用 Web 或应用服务器重新设置会话 ID。你不需要自己写。对于 Tomcat 7:http://www.tomcatexpert.com/blog/2011/04/25/session-fixation-protection

      【讨论】:

      • 您的回答很有帮助。顺便说一句,对不起,我没有提到我的应用服务器。我正在使用 Jboss。我将在 Jboss 中检查这一点。如果您有任何有用的链接,请分享。希望Jboss也有这个功能。
      【解决方案3】:

      您可以通过将以下属性设置为 true 来解决此问题,就像 Liferay 默认设置的那样。

      #
      # Set this to true to invalidate the session when a user logs into the
      # portal. This helps prevents phishing. Set this to false if you need the
      # guest user and the authenticated user to have the same session.
      #
      # Set this to false if the property "company.security.auth.requires.https"
      # is set to true and you want to maintain the same credentials across HTTP
      # and HTTPS sessions.
      #
      session.enable.phishing.protection=true
      

      【讨论】:

        【解决方案4】:

        @蒂亚戈:

        session.enable.phishing.protection=trueportal.properties 中默认为 true。无论如何,我已经在portal-ext.properties 中添加了这个条目。但是,即便如此,JSESSIONID 在登录前后仍然保持不变。

        我已经按照这个link 实现了一个filter。实现此过滤器后,当我点击 Liferay 的登录页面时,会创建一个 JSESSIONID。输入凭据并登录后,将保留相同的 JSESSIONID

        我在Servlet 中实现了这个filter,而不是在我的任何Portlets 或Liferay 的ROOT 应用程序中。我的Servlet 部署在 LR + Jboss AS 捆绑包中。我首先点击Servlet,从这里我有一个链接将重定向到Liferay 的登录页面。我已经在我的Servlet 中实现了这个filter,因为容器将在第一次请求时附加JSESSIONID,因为它不知道是否启用了cookie。因为,JSESSIONID 被附加,我无法在Servlet 中检索我的图像(因为 url 是 myImage.jpg;jsessionid=)。因此,我实现了这个filter

        filter 是否与 Liferay 的配置冲突?即使在设置session.enable.phishing.protection=true 相同JSESSIONID 被保留之后意味着还有什么问题?

        【讨论】:

        • @Thiago:我已经在上面发表了我的观察结果
        【解决方案5】:

        将此代码放入portal-ext.properties

        它将解决问题,每次登录都会生成新的会话ID。

        session.enable.phishing.protection=true
        com.liferay.util.servlet.SessionParameters=true
        

        【讨论】:

          猜你喜欢
          • 2018-09-15
          • 2016-11-16
          • 2014-07-09
          • 2015-07-13
          • 1970-01-01
          • 2019-08-12
          • 1970-01-01
          • 2014-03-20
          • 2019-10-28
          相关资源
          最近更新 更多