Страница 1 из 1

X-CSRF-TOKEN

Добавлено: 23 май 2025, 11:54
ya
1. Генерация уникального токена

Код: Выделить всё

#include <iostream>
#include <string>
#include <random>
#include <iomanip>
#include <sstream>
#include <unordered_map>
#include <ctime>

// Простая функция для генерации случайного токена
std::string generate_token() {
    static std::mt19937 rng((unsigned) std::time(nullptr));
    static std::uniform_int_distribution<uint64_t> dist;

    uint64_t random_value = dist(rng);

    std::stringstream ss;
    ss << std::hex << random_value;
    return ss.str();
}

2. Хранение токенов (например, в сессии или в памяти)
Для простоты можно использовать std::unordered_map, где ключ — идентификатор сессии или пользователя, значение — токен.

Код: Выделить всё

// В простом случае — глобальный map
std::unordered_map<std::string, std::string> session_tokens;

// Функция для установки токена для сессии
void set_csrf_token(const std::string& session_id) {
    std::string token = generate_token();
    session_tokens[session_id] = token;
}

// Функция для проверки токена
bool validate_csrf_token(const std::string& session_id, const std::string& token) {
    auto it = session_tokens.find(session_id);
    if (it != session_tokens.end() && it->second == token) {
        return true;
    }
    return false;
}
3. Передача токена клиенту
При отправке формы или страницы вставьте токен в HTML:

Код: Выделить всё

<input type="hidden" name="X-CSRF-TOKEN" value="ТУТ_ТОКЕН">
или в HTTP-заголовок, если используете API.

4. Проверка токена при получении POST-запроса
При обработке POST-запроса извлекайте значение токена из заголовка или тела запроса и проверяйте:

Код: Выделить всё

// Пример: при обработке запроса
std::string received_token = ...; // из POST данных или заголовков
std::string session_id = ...; // из куки или другого источника

if (validate_csrf_token(session_id, received_token)) {
    // Токен валиден, продолжаем обработку
} else {
    // Токен недействителен — отклоняем запрос
}