当用户点击Portal
(可能是Liferay
,Jboss Portal
..)的登录页面时,JSESSIONID cookie
会创建container
。在登录页面中输入凭据后,相同的JSESSIONID
将被转移。
在此,最终用户可以在获得身份验证之前了解JSESSIONID
(通过查看登录页面中的JSESSIONID
)。这将增加网站的黑客攻击漏洞,因为在获得身份验证之前,可以知道JSESSIONID
。
此post建议在身份验证后具有不同的JSESSIONID
。
因此,创建新的JSESSIOND可以通过使用Portal
服务器来实现(使用Liferay CE 6.0
),还是必须由Web应用程序开发人员处理?如果必须由Web应用程序开发人员处理,最好的方法是什么? request.getSession(true)
是唯一的选择?如果我需要指示Liferay
在身份验证后创建新的JSESSIONID
如何完成?
答案 0 :(得分:1)
这看起来很像我很久以前为Liferay 5.2.5解决的会话固定问题。解决方案包括创建一个强制新会话ID的自定义Tomcat Valve。因此,解决方案并不是Liferay特有的,并且取决于您是否使用Tomcat。
我怀疑将旧解决方案改编为更新的Liferay / Tomcat组合应该不会太困难。您可以在旧的和当前未维护的博客中找到有关我的解决方案的必要信息(如果我只有更多时间......):Fixing session fixation in Liferay
答案 1 :(得分:1)
这里的问题不是用户知道会话ID(用户总是知道它,它是由他的浏览器发送的)。攻击情形是用户在注销时单击已嵌入JSESSIONID的链接,然后进行身份验证,此会话将成为登录会话。现在,最初创建链接的人可以使用相同的会话充当用户。更多详情请见https://en.wikipedia.org/wiki/Session_fixation
是的,在用户进行身份验证后,使用Web或app服务器重新设置会话ID。你不需要自己写。对于Tomcat 7:http://www.tomcatexpert.com/blog/2011/04/25/session-fixation-protection
答案 2 :(得分: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
答案 3 :(得分:0)
@Thiago:
此session.enable.phishing.protection=true
默认情况下在portal.properties
中为true。无论如何,我在portal-ext.properties
中添加了这个条目。但是,即使这样,JSESSIONID
在登录前后也保持不变。
我已根据此link实施了filter
。实现此过滤器后,当我点击Liferay的登录页面时,会创建一个JSESSIONID
。输入凭据并登录后,将保留相同的JSESSIONID
。
我已在filter
中实现此Servlet
,而不是在Portlets
或Liferay的ROOT应用中。我的Servlet
部署在LR + Jboss AS包中。我第一次点击Servlet
,从这里我有一个链接,将重定向到Liferay的登录页面。我已在filter
中实施了此Servlet
,因为Container会在第一次请求时附加JSESSIONID
,因为它不知道是否启用了Cookie。由于JSESSIONID
被追加,我无法在Servlet
中检索我的图片(因为网址是myImage.jpg; jsessionid =)。因此,我已经实现了这个filter
。
这个filter
与Liferay的配置有冲突吗?即使设置session.enable.phishing.protection=true
相同JSESSIONID
,保留意味着还有什么可能是问题?
答案 4 :(得分:0)
将此代码放在portal-ext.properties
。
它将解决问题,每次登录时,都会生成新的会话ID。
session.enable.phishing.protection=true
com.liferay.util.servlet.SessionParameters=true