任何人都可以请帮助我。 我已被分配来保护现有的Web应用程序。基于Spring MVC安全令牌的身份验证
问题: 当用户已经登录到应用程序(这意味着会话是活动的),那时攻击者可以猜测输入字段并保存url并创建一个类似的页面并发送超级链接。如果用户点击该链接,它将不会通过JavaScript,而是会触发弹簧控制器。由于会话处于活动状态,因此会将攻击者数据保存到数据库中。
这是我们现在使用的。 1)春季安全
<http auto-config="true">
<intercept-url pattern="/**" access="ROLE_ADMIN, ROLE_HR" />
<custom-filter position="PRE_AUTH_FILTER" ref="siteminderFilter" />
</http>
<beans:bean id="siteminderFilter" class="com.mywbsite.security.UserFilter">
<beans:property name="authenticationManager" ref="authenticationManager" />
<beans:property name="continueFilterChainOnUnsuccessfulAuthentication" value="false"/>
</beans:bean>
该方法被调用时,用户登录到应用程序第一次
protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
String userId = request.getHeader("uid");
logger.info("<<<<<<<<<<<<<<<<<<<<<userId>>>>>>>>>>>>>>>>>>>>>>> : "+userId);
return userId;
}
当用户做任何事情它调用任何控制器/ JAVA
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println(request.getParameter(BaseConstants.DV_USER_SESSION_IDENTIFIER));
logger.info(request.getParameter(BaseConstants.DV_USER_SESSION_IDENTIFIER));
logger.info("Existing the UserFilter.doFilter method...");
}
这种方法被称为
解决方案: 在控制器/过滤器中,我必须确定请求是来自我的应用程序还是来自其他任何地方。
这就是我想要实现的。
- 在getPreAuthenticatedPrincipal()方法内部创建一个随机令牌并将其存储在会话中。
- 从会话中获取变量并将其放入jsp中的隐藏变量中
- 当用户执行任何操作时,将值传递给隐藏变量并作为请求参数传递给控制器。
- 在Controller/Filter中从会话中获取随机值并从请求参数中获取隐藏值。现在比较。如果匹配,则执行正常操作,否则抛出错误页面。
现在我关心的是,如果我实现上述解决方案,我必须在每个jsp中写入隐藏的变量代码,并在每个请求和请求参数中传递给控制器。
你能帮我解释一下吗?在此先感谢
你想使用siteminder?并实施单一登录?您不需要显式处理会话变量。 –
@JerinJoseph:刚才更新了这个问题,以及我想如何解决这个问题。你能再看一遍吗? – SKumar