Что такое CSRF токен

«Что такое CSRF токен» — вопрос из категории Безопасность, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

CSRF (Cross-Site Request Forgery) токен — это уникальный, секретный и непредсказуемый код, который генерируется сервером и передается клиенту для защиты от CSRF-атак. Он добавляется в формы или запросы, требующие выполнения важных действий (например, изменение данных). Сервер проверяет токен перед обработкой запроса.

Пример в Go с использованием gorilla/csrf:

package main

import (
    "github.com/gorilla/csrf"
    "net/http"
)

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/form", func(w http.ResponseWriter, r *http.Request) {
        // Генерация формы с токеном
        w.Write([]byte(`
            <form action="/process" method="POST">
                <input type="hidden" name="` + csrf.TemplateField(r) + `" value="` + csrf.Token(r) + `">
                <input type="submit">
            </form>
        `))
    })

    CSRF := csrf.Protect([]byte("32-byte-long-auth-key"))
    http.ListenAndServe(":8080", CSRF(mux))
}

Токен обычно хранится в сессии или куках и должен:

  • Быть уникальным для каждой сессии
  • Иметь ограниченное время жизни
  • Передаваться через скрытое поле формы или HTTP-заголовок