> Что такое CSRF и как определить поддельный запрос (Go)
Уровень: junior · Роль: backend · Категория: Технические вопросы
Компании: VK
Стек: Go
> Пример ответа
CSRF (Cross-Site Request Forgery) - это тип атаки, при котором злоумышленник заставляет аутентифицированного пользователя выполнить нежелательное действие на доверенном сайте. Например, пользователь заходит на банковский сайт, а затем на вредоносный, который отправляет запрос на перевод денег, используя куки банка.
В Go для защиты от CSRF обычно используют токены (CSRF tokens). Сервер генерирует уникальный токен, привязывает его к сессии пользователя и вставляет в HTML-форму или заголовок запроса. При отправке запроса сервер сравнивает полученный токен с сохранённым в сессии. Если они не совпадают - запрос считается поддельным.
Пример реализации в Go с использованием пакета gorilla/csrf:
GOimport ("github.com/gorilla/csrf""github.com/gorilla/mux")func main() {r := mux.NewRouter()// Защита всех POST/PUT/DELETE запросовr.Use(csrf.Protect([]byte("32-байтный-секретный-ключ")))r.HandleFunc("/transfer", transferHandler).Methods("POST")}func transferHandler(w http.ResponseWriter, r *http.Request) {// Токен автоматически проверяется middleware// Если невалиден - возвращается 403// Для форм используем csrf.TemplateField(r)}
Как определить поддельный запрос:
-
Отсутствие CSRF-токена в запросе (проверка заголовка
X-CSRF-Tokenили поля формы). -
Несовпадение токена с сохранённым в сессии.
-
Проверка заголовка
OriginилиReferer(но это менее надёжно, так как их можно подделать).
Дополнительно: для API (например, REST) часто используют токены в заголовке Authorization или X-API-Key, что также защищает от CSRF, так как браузер не отправляет их автоматически.
> Похожие задачи по backend
Что такое MITM (man-in-the-middle) атака и как с ней бороться
Для чего нужны центры сертификации и чем самоподписанные сертификаты отличаются от выданных центрами
Как работают встраиваемые структуры (embedding) в Go
Что происходит при именованном встраивании структур и как обращаться к полям и методам при конфликте имен в Go
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью