mirror of
https://github.com/Direct-Dev-Ru/go-lcg.git
synced 2025-11-15 17:20:00 +00:00
7.8 KiB
7.8 KiB
🛡️ Руководство по тестированию CSRF защиты
📋 Обзор
Это руководство поможет вам протестировать CSRF защиту в LCG приложении и понять, как работают CSRF атаки.
🚀 Быстрый старт
1. Запуск сервера с CSRF защитой
# Запуск с аутентификацией и CSRF защитой
LCG_SERVER_REQUIRE_AUTH=true ./lcg serve -p 8080
2. Автоматическое тестирование
# Запуск автоматических тестов
./test_csrf.sh
3. Ручное тестирование
# Откройте в браузере
open csrf_test.html
🧪 Типы тестов
✅ Тест 1: Защищенные запросы
- Цель: Проверить, что POST запросы без CSRF токена блокируются
- Ожидаемый результат: 403 Forbidden
- Endpoints:
/api/execute,/api/save-result,/api/add-to-history
✅ Тест 2: Разрешенные запросы
- Цель: Проверить, что GET запросы работают
- Ожидаемый результат: 200 OK
- Endpoints:
/login,/,/history
✅ Тест 3: CSRF токены
- Цель: Проверить наличие CSRF токенов в формах
- Ожидаемый результат: Токены присутствуют в HTML
✅ Тест 4: Поддельные токены
- Цель: Проверить защиту от поддельных токенов
- Ожидаемый результат: 403 Forbidden
🎯 Сценарии атак
Сценарий 1: Выполнение команд
<!-- Злонамеренная форма -->
<form action="http://localhost:8080/api/execute" method="POST">
<input type="hidden" name="prompt" value="rm -rf /">
<input type="hidden" name="system_id" value="1">
<button type="submit">Нажми меня!</button>
</form>
Сценарий 2: Сохранение данных
<!-- Злонамеренная форма -->
<form action="http://localhost:8080/api/save-result" method="POST">
<input type="hidden" name="result" value="Вредоносные данные">
<input type="hidden" name="command" value="malicious_command">
<button type="submit">Сохранить</button>
</form>
Сценарий 3: JavaScript атака
// Злонамеренный JavaScript
fetch('http://localhost:8080/api/execute', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({prompt: 'whoami', system_id: '1'})
});
🔍 Анализ результатов
✅ Защита работает, если:
- Все POST запросы возвращают 403 Forbidden
- В ответах есть "CSRF token required"
- GET запросы работают нормально
- CSRF токены присутствуют в формах
❌ Уязвимость есть, если:
- POST запросы выполняются успешно (200 OK)
- Команды выполняются на сервере
- Данные сохраняются без CSRF токенов
- Нет проверки Origin/Referer заголовков
🛠️ Инструменты тестирования
1. Автоматический скрипт
./test_csrf.sh
- Тестирует все основные endpoints
- Проверяет CSRF токены
- Выводит подробный отчет
2. HTML тестовая страница
open csrf_test.html
- Интерактивное тестирование
- Визуальная проверка результатов
- Тестирование в браузере
3. Демонстрационная атака
open csrf_demo.html
- Показывает, как работают CSRF атаки
- Демонстрирует уязвимости
- Образовательные цели
🔧 Настройка тестов
Переменные окружения для тестирования:
# Включить аутентификацию
LCG_SERVER_REQUIRE_AUTH=true
# Настроить CSRF защиту
LCG_COOKIE_SECURE=false
LCG_DOMAIN=.localhost
LCG_COOKIE_PATH=/
# Запуск сервера
./lcg serve -H 0.0.0.0 -p 8080
Настройка reverse proxy для тестирования:
# Для тестирования за reverse proxy
LCG_SERVER_REQUIRE_AUTH=true \
LCG_SERVER_ALLOW_HTTP=true \
LCG_DOMAIN=.yourdomain.com \
LCG_COOKIE_PATH=/lcg \
LCG_COOKIE_SECURE=false \
./lcg serve -H 0.0.0.0 -p 8080
📊 Интерпретация результатов
Успешные тесты:
✅ CSRF защита /api/execute: PASS - Запрос заблокирован (403 Forbidden)
✅ CSRF защита /api/save-result: PASS - Запрос заблокирован (403 Forbidden)
✅ CSRF защита /api/add-to-history: PASS - Запрос заблокирован (403 Forbidden)
✅ GET запросы: PASS - GET запросы работают (HTTP 200)
✅ CSRF токен на странице входа: PASS - Токен найден
✅ CSRF защита от поддельного токена: PASS - Поддельный токен заблокирован (403 Forbidden)
Проблемные тесты:
❌ CSRF защита /api/execute: FAIL - Запрос прошел (HTTP 200)
❌ CSRF защита /api/save-result: FAIL - Запрос прошел (HTTP 200)
❌ CSRF токен на странице входа: FAIL - Токен не найден
🚨 Частые проблемы
1. Cookies не работают
- Проверьте настройки
LCG_DOMAIN - Убедитесь, что
LCG_COOKIE_PATHправильный - Проверьте настройки reverse proxy
2. CSRF токены не генерируются
- Убедитесь, что
LCG_SERVER_REQUIRE_AUTH=true - Проверьте инициализацию CSRF менеджера
- Проверьте логи сервера
3. Запросы проходят без токенов
- Проверьте middleware в
serve/middleware.go - Убедитесь, что CSRF middleware применяется
- Проверьте исключения в middleware
📝 Рекомендации
Для разработчиков:
- Всегда тестируйте CSRF защиту
- Используйте автоматические тесты
- Проверяйте все POST endpoints
- Валидируйте CSRF токены
Для администраторов:
- Регулярно запускайте тесты
- Мониторьте логи на подозрительную активность
- Настройте правильные заголовки в reverse proxy
- Используйте HTTPS в продакшене
🎓 Образовательные материалы
- OWASP CSRF Prevention Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html
- CSRF атаки: https://owasp.org/www-community/attacks/csrf
- SameSite cookies: https://web.dev/samesite-cookies-explained/
⚠️ ВНИМАНИЕ: Эти тесты предназначены только для проверки безопасности вашего собственного приложения. Не используйте их для атак на чужие системы!