Рубрики
Без рубрики

Заголовок «Чистый сайт-данные» в весенней безопасности

Узнайте, как использовать Spring Security с ClearSiteDataHeaderWriter, чтобы добавить заголовок ответа http Clear-Site-Data

Автор оригинала: baeldung.

1. Обзор

Для оптимизации сети некоторые веб-сайты позволяют браузерам кэшировать ресурсы, такие как CSS или JS, в локальном хранилище. Это позволяет браузерам сохранить сеть туда и обратно для каждого запроса.

Таким образом, кэширование ресурсов имеет жизненно важное значение для улучшения времени загрузки веб-страниц. Не менее важно очистить кэшированные данные, как только это не требуется. Например, если пользователь выходит из веб-сайта, браузеры должны удалить все данные сеанса из кэша.

Есть две основные проблемы с кэшированием данных браузеров дольше, чем это требуется:

  • Современные веб-сайты используют богатый набор файлов CSS и JS, которые потребляют много памяти браузера
  • Веб-сайты, которые кэшируют конфиденциальные данные, такие как сессионные файлы cookie, подвержены фишинговым атакам

В этом учебнике мы увидим, как http в Чистая-сайт-данные заголовок ответа помогает веб-сайтам в очистке локально хранящихся данных из браузеров.

2. Заголовок с четкими данными сайта

Так же, как Кэш-контроль заголовок, Чистая-сайт-данные является заголовком ответа HTTP. Веб-сайты могут использовать этот заголовок для инструктажа браузеров по удалению данных, кэшированных в локальном хранилище.

Для веб-сайтов, требующих проверки подлинности, Кэш-контроль заголовок обычно включен в /Вход ответ и позволяет браузерам кэшировать пользовательские данные. Аналогичным образом, веб-сайты включают Чистая-сайт-данные заголовок в /Логот ответ на очистить любые кэшированные данные, которые принадлежат этому пользователю.

На этом этапе важно понимать, что браузеры обычно классифицируют локальное хранилище на разные типы:

  • Местное хранилище
  • Хранение сеансов
  • Печенье

Поскольку веб-сайты могут хранить данные в любом из этих типов, Очистить-сайт-данные позволяет указать целевое хранилище в заголовке:

  • кэш – для удаления локально кэшированных данных и включает в себя как частные, так и общие кэши браузера
  • печенье – для удаления данных, хранящихся в файлах cookie браузера
  • складские – для очищения локального и сеансового хранения браузера
  • исполнениеКонтексты – этот переключатель говорит браузеру перезагрузить вкладку браузера для этого URL
  • * (звездочка) – удаляет данные со всех вышеперечисленных складских помещений

В результате Чистая-сайт-данные заголовок должен включать по крайней мере один из этих типов хранения:

Clear-Site-Data: "cache", "cookies", "storage", "executionContexts"

В следующих разделах мы реализуем проект /Логот службы весенней безопасности и включают в себя Чистая-сайт-данные заголовок в ответе.

3. Зависимость от Maven

Прежде чем мы напишем код, чтобы добавить Чистая-сайт-данные заголовок весной, давайте добавим весна-безопасность-веб- и весна-безопасность-конфиг зависимостей от проекта:


    org.springframework.security
    spring-security-web
    5.2.2.RELEASE


    org.springframework.security
    spring-security-config
    5.2.2.RELEASE

4. ClearSiteDataHeaderWriter в весенней безопасности

Мы обсуждали ранее, что весна обеспечивает Кэшконтроль утилита класса, чтобы написать Кэш-контроль заготовки в ответ. Аналогичным образом, Spring Security предоставляет ClearSiteDataHeaderWriter класс, чтобы добавить заголовок в ответе HTTP легко :

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf()
          .disable()
          .formLogin()
          .loginPage("/login.html")
          .loginProcessingUrl("/perform_login")
          .defaultSuccessUrl("/homepage.html", true)
          .and()
          .logout().logoutUrl("/baeldung/logout")
          .addLogoutHandler(new HeaderWriterLogoutHandler(
            new ClearSiteDataHeaderWriter(
              ClearSiteDataHeaderWriter.Directive.CACHE,
              ClearSiteDataHeaderWriter.Directive.COOKIES,
              ClearSiteDataHeaderWriter.Directive.STORAGE)));
    }
}

Здесь мы внедрили страницу входа и логотипа с Spring Security. В результате Весна добавит Чистая-сайт-данные заголовок в ответ на все /baeldung/logout запросы :

Clear-Site-Data: "cache", "cookies", "storage"

Если мы сейчас используем локон и отправить запрос https://localhost:8080/baeldung/logout , мы получим следующие заготовки в ответ:

{ [5 bytes data]
< HTTP/1.1 302
< Clear-Site-Data: "cache", "cookies", "storage"
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< Strict-Transport-Security: max-age=31536000 ; includeSubDomains
< X-Frame-Options: DENY
< Location: https://localhost:8080/login.html?logout
< Content-Length: 0
< Date: Tue, 17 Mar 2020 17:12:23 GMT

5. Заключение

В этой статье мы изучили влияние кэширования браузерами критически важных пользовательских данных, даже если это не требуется. Например, браузеры не должны кэшировать данные после того, как пользователь вышел из веб-сайта.

Затем мы увидели, как http Чистая-сайт-данные заголовок ответа позволяет веб-сайтам заставлять браузеры очищать локально кэшированные данные.

Наконец, мы внедрили страницу logout в весенней безопасности с ClearSiteDataHeaderWriter добавить этот заголовок в ответ контроллера.

Как всегда, код доступен более чем на GitHub .