任何人都可以帮助我。 我被分配来保护现有的Web应用程序。
问题: 当用户已经登录到应用程序(这意味着会话处于活动状态)时,攻击者可以猜测输入字段并保存URL并创建类似页面并发送超链接。如果用户点击该链接,它将不会通过javascript,而是会点击弹簧控制器。由于会话处于活动状态,它会将攻击者数据保存到数据库中。
以下是我们现在使用的内容。 1)Spring Security
<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...");
}
解决方案: 在控制器/过滤器中,我必须确定请求是来自我的应用程序还是来自其他任何地方。
以下是我正在考虑实施的内容。
现在我担心的是,如果我实现上述解决方案,我必须在每个jsp中编写隐藏的变量代码,并在每个请求和请求参数中传递给控制器。
你能帮我解决一下这个问题吗?提前致谢
答案 0 :(得分:0)
我使用Spring CSRF解决了上述问题。我在实施CSRF时遇到了一个问题。问题是CSRF正在创建2个令牌。找到根本原因需要很长时间(至少1天)。根案例是我试图在我的Fiter中获取csrf标记值并使用下面的代码打印它。因此,一旦我转到request.getAttribute(&#34; _csrf&#34;),它就会创建一个新令牌。所以我只是从我的csrf中删除了下面的行,并且刚刚执行了上面的spring csrf链接中描述的内容。它工作
// CsrfToken token = (CsrfToken) request.getAttribute("_csrf");
// System.out.println(">>>>>>>>>>UserFilter.getPreAuthenticatedPrincipal() CSRF Token: " + token.getToken());