Если вы читали мои предыдущие статьи о среде, возможно, вы уже знаете, что в настоящее время мы работаем над проектом ScholarX. На прошлой неделе я создал несколько конечных точек API и модульных тестов для серверной части. Работая над этим, я нашел слово, которого никогда раньше не слышал; «CSRF». Итак, я решил провести небольшое исследование по этому поводу и поделиться тем, что я нашел, с вами.
Что это?
Так что же такое CSRF? В основном это аббревиатура от «Cross-Site Request Forgery». Похоже на что-то незаконное. Да! Например, с помощью CREF кто-то может украсть деньги с вашего банковского счета, отправив запрос без вашего подтверждения. Кроме того, кто-то может даже изменить данные в ваших важных базах данных. (Не пытайтесь делать что-либо из этих 😆)
В CSRF-атаке злоумышленник обманом заставляет невиновного конечного пользователя отправить веб-запрос, который он не намеревался. Это может привести к выполнению действий на веб-сайте, которые могут включать непреднамеренную утечку данных клиента или сервера, изменение состояния сеанса или манипулирование учетной записью конечного пользователя. - Википедия
Так что мы должны предотвратить это. При весенней загрузке защита CSRF автоматически поставляется с пакетом spring-boot-starter-security. По умолчанию он там включен. Таким образом, вам нужно только создать SecurityConfig.java
файл и включить веб-безопасность.
В защите CSRF мы используем токен для авторизации запросов API.
Маркер CSRF - это уникальное, секретное, непредсказуемое значение, которое генерируется серверным приложением и передается клиенту таким образом, что оно включается в последующий HTTP-запрос, сделанный клиентом.
Возьмем примерный сценарий. Представьте, что пользователь хочет добавить данные в базу данных с помощью формы. Итак, пользователь входит в панель управления и появляется форма для добавления данных. Здесь сервер отправляет секретный токен csrf с формой. И он также отправляет другой токен csrf в виде файла cookie. Оба они генерируются случайным образом, поэтому никто не может их угадать. После отправки формы оба токена снова отправляются на сервер. Сервер проверяет, совпадают ли токены с предыдущими. Если они не совпадают, запрос будет отклонен. Просто так бывает.
- Сервер отправляет два токена (с формой и в виде файла cookie)
- Пользователь отправляет форму и отправляет запрос
- Сервер проверяет два токена
- Сервер утверждает или отклоняет запрос
Вы хотите его отключить?
Хотя это рискованно, вы можете отключить защиту csrf для тестирования или чего-то еще. Единственное, что вам нужно сделать, это обновить SecurityConfig.java
следующим образом:
@EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter{ @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable(); } }
На этом пока все. Я все еще учусь работать с токенами csrf в Spring-boot. Надеюсь рассказать вам об этом в будущих публикациях. А пока… Пока! Спасибо за прочтение!