1

当用户点击 a 的登录页面Portal(可能是Liferay, Jboss Portal..)时, JSESSIONID cookiecontainer. 在登录页面中输入凭据后,同样JSESSIONID会被保留。

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

这篇文章建议JSESSIONID在认证后有一个不同的。

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

4

5 回答 5

1

您可以通过将以下属性设置为 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
于 2012-10-08T18:13:29.713 回答
1

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

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

于 2012-10-08T10:49:44.637 回答
1

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

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

于 2012-10-08T08:59:24.083 回答
0

@蒂亚戈:

session.enable.phishing.protection=true在默认情况下为真portal.properties。无论如何,我已经在portal-ext.properties. 但是,即便如此JSESSIONID,登录前后仍然保持不变。

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

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

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

于 2012-10-09T04:58:05.073 回答
0

将此代码放在portal-ext.properties.

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

session.enable.phishing.protection=true
com.liferay.util.servlet.SessionParameters=true
于 2014-07-31T07:27:42.940 回答