Struts 2 中的会话劫持预防

问题描述 投票:0回答:1

我正在开发一个 Java 应用程序,该应用程序似乎存在会话劫持漏洞。

为了防止这种情况,建议在登录后更改用户的

JSESSIONID

我的应用程序基于 Struts 2 和 Tomcat 7,我实现了一个代码来在用户登录后更改

JSESSIONID

但是我在运行代码时遇到以下问题。

java.lang.IllegalStateException: setAttribute: Session already invalidated
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1289)
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1254)
at org.apache.catalina.session.StandardSessionFacade.setAttribute          (StandardSessionFacade.java:130)
at org.apache.struts2.dispatcher.SessionMap.put(SessionMap.java:181)

这是我写的代码:

HttpSession httpSession = ServletActionContext.getRequest().getSession();
HashMap<String, Object> attributes = new HashMap<String, Object>(); 
Enumeration<String> enames = httpSession.getAttributeNames();
while ( enames.hasMoreElements() )
{
String name = enames.nextElement();   
if ( !name.equals( "JSESSIONID" ) )
{ 
attributes.put( name, httpSession .getAttribute( name ) );
}      
}   
httpSession.invalidate();       
httpSession = request.getSession(true);                     
for ( Map.Entry<String, Object> et : attributes.entrySet() )
{
userInfoMap.put( et.getKey(), et.getValue() );
}   
getSession().put("userid",userId);//Setting value to session
java struts2 sessionid owasp session-hijacking
1个回答
0
投票

通常当您

invalidate
会话时,您应该重定向到某个操作,因此如果该操作实现
SessionAware
,新的会话映射将注入其中。

但是在您发布的代码中,您尝试重用会话映射,同时它包含旧会话。

© www.soinside.com 2019 - 2024. All rights reserved.