Spring + Wicket 项目中的 CSRF 实现

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

我们必须在使用 spring 和 wicket 作为前端框架的遗留应用程序中实现 csrf。为了实现 csrf,我们尝试了两种方法:

方法一:将spring security升级到版本4,默认启用csrf,我们在所有wicket表单中添加了隐藏字段。 但不幸的是,我们在登录后收到 403 错误:

这是html页面:

<form wicket:id="Form" id="Form" method="post">
    <input type="hidden" wicket:name="${_csrf.parameterName}" wicket:value="${_csrf.token}"/>
    <span id="feedback" wicket:id="feedback"/>
    <h2 align="left">Test Text</h2>
    <table border="0" cellspacing="2" cellpadding="0" class="form">
        <tr>
            <td>
                <h4>Test</h4>
            </td>
            <td>
                <span class="required">*</span>
            </td>
            <td class="FieldName">
                <select wicket:id="Test"/>
            </td>
        </tr>
        <tr>
            <td colspan="3">&nbsp;</td>
        </tr>
    </table>
    <div class="buttonpannel">
        <div class="right">
            <input wicket:id="submit" type="submit" value=" OK " readonly="readonly" style="width:80px;"/>
        </div>
    </form>

方法 2:我们也尝试像使用 java 一样生成令牌并遵循此link。但是拦截器和数据值处理器没有被调用,我们在实施后的应用程序中看不出有什么不同。这是我们的 web.xml:

<security:http entry-point-ref="http403EntryPoint">
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY"/>
    <security:custom-filter ref="preAuthFilter" position="PRE_AUTH_FILTER"/>
    <!-- security:access-denied-handler error-page="/error/403" /-->
</security:http>
<bean id="http403EntryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/>
<bean id="preAuthFilter" class="com.c.w.security.PreAuthFilter">
    <property name="authenticationManager" ref="authenticationManager"/>
    <property name="checkForPrincipalChanges" value="true"/>
</bean>
<bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
    <property name="preAuthenticatedUserDetailsService">
        <bean class="com.c.w.security.UserDetailsService"/>
    </property>
</bean>
<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider ref='preauthAuthProvider'/>
</security:authentication-manager>
<security:global-method-security secured-annotations="enabled"/>
<!-- Data Value Processor -->
<bean name="requestDataValueProcessor" class="com.c.w.csrf.CSRFRequestDataValueProcessor"/>
<!-- Interceptor handlers -->
<mvc:interceptors>
    <bean class="com.c.w.csrf.CSRFHandlerInterceptor"/>
</mvc:interceptors>

现在我们有办法让 csrf 在我们的应用程序中工作。我们使用 wicket 1.5.10 版本

spring-security csrf wicket csrf-token wicket-1.5
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.