Ответ
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-заголовок