Если вы читали мои предыдущие статьи о среде, возможно, вы уже знаете, что в настоящее время мы работаем над проектом ScholarX. На прошлой неделе я создал несколько конечных точек API и модульных тестов для серверной части. Работая над этим, я нашел слово, которого никогда раньше не слышал; «CSRF». Итак, я решил провести небольшое исследование по этому поводу и поделиться тем, что я нашел, с вами.

Что это?

Так что же такое CSRF? В основном это аббревиатура от «Cross-Site Request Forgery». Похоже на что-то незаконное. Да! Например, с помощью CREF кто-то может украсть деньги с вашего банковского счета, отправив запрос без вашего подтверждения. Кроме того, кто-то может даже изменить данные в ваших важных базах данных. (Не пытайтесь делать что-либо из этих 😆)

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

Так что мы должны предотвратить это. При весенней загрузке защита CSRF автоматически поставляется с пакетом spring-boot-starter-security. По умолчанию он там включен. Таким образом, вам нужно только создать SecurityConfig.java файл и включить веб-безопасность.

В защите CSRF мы используем токен для авторизации запросов API.

Маркер CSRF - это уникальное, секретное, непредсказуемое значение, которое генерируется серверным приложением и передается клиенту таким образом, что оно включается в последующий HTTP-запрос, сделанный клиентом.

Возьмем примерный сценарий. Представьте, что пользователь хочет добавить данные в базу данных с помощью формы. Итак, пользователь входит в панель управления и появляется форма для добавления данных. Здесь сервер отправляет секретный токен csrf с формой. И он также отправляет другой токен csrf в виде файла cookie. Оба они генерируются случайным образом, поэтому никто не может их угадать. После отправки формы оба токена снова отправляются на сервер. Сервер проверяет, совпадают ли токены с предыдущими. Если они не совпадают, запрос будет отклонен. Просто так бывает.

  1. Сервер отправляет два токена (с формой и в виде файла cookie)
  2. Пользователь отправляет форму и отправляет запрос
  3. Сервер проверяет два токена
  4. Сервер утверждает или отклоняет запрос

Вы хотите его отключить?

Хотя это рискованно, вы можете отключить защиту csrf для тестирования или чего-то еще. Единственное, что вам нужно сделать, это обновить SecurityConfig.java следующим образом:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
    }
}

На этом пока все. Я все еще учусь работать с токенами csrf в Spring-boot. Надеюсь рассказать вам об этом в будущих публикациях. А пока… Пока! Спасибо за прочтение!