Sanitizer - проверка правильности токена Spring Boot CSRF Ответ - PullRequest
0 голосов
/ 05 июля 2018

Я реализовал Spring Securitym oAuth2 в моем приложении Spring Boot.

Я провел тест на уязвимость своего приложения и обнаружил уязвимость атаки XSS на https://myapp:post/login?_csrf=

Образец атаки следующий

Запрос атаки: https://myapp:post/login?_csrf=<script>alert('hello!');</script>

Ответ сервера:

{
"timestamp": 1530781641320,
"status": 403,
"error": "Forbidden",
"message": "Invalid CSRF Token '<script>alert('hello!');</script>' was found on the request parameter '_csrf' or header 'X-XSRF-TOKEN'.",
"path": "/login"
}

этот ответ <script>alert('hello!');</script> должен быть таким &lt;script&gt;alert(&#39;hello!&#39;);&lt;/script&gt;

Я хочу определить _csrf параметр <script>alert('hello!');</script> и не могу понять, как это сделать. Есть ли фильтр для получения ответа CSRF и сенсибилизации ответа?

Это мой WebSecurityConfigurerAdapter

@Configuration
public class OAuthWebFormConfiguration extends WebMvcConfigurerAdapter {

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/login").setViewName("login");
    registry.addViewController("/oauth/confirm_access").setViewName("authorize");
}

@Configuration
@Order(-20)
protected static class LoginConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomAuthenticationManager customAuthenticationManager;

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
                .formLogin().loginPage("/login").permitAll()
                .and()
                .requestMatchers()
                .antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access")
                .and()
                .authorizeRequests()
                .anyRequest()
                .authenticated()
                .and()
                .csrf()
                .csrfTokenRepository(cookieCsrfTokenRepository())
                .and()
                .headers()
                .frameOptions().sameOrigin()
                .xssProtection().xssProtectionEnabled(true);
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/assets/**");
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.parentAuthenticationManager(customAuthenticationManager);
    }

    private CookieCsrfTokenRepository cookieCsrfTokenRepository() {
        CookieCsrfTokenRepository csrfTokenRepository = new CookieCsrfTokenRepository();
        csrfTokenRepository.setCookieHttpOnly(true);
        return csrfTokenRepository;
    }
}
}
...