Контрольный список для production
Обязательные проверки
Конфигурация TLS
- [ ]
InsecureSkipVerifyустановлен вfalse(значение по умолчанию) - [ ]
MinTLSVersionне нижеtls.VersionTLS12 - [ ] Не используется
TestingConfig()
Защита от SSRF
- [ ]
AllowPrivateIPsравенfalse(значение по умолчанию) - [ ] При необходимости доступа к внутренним сервисам используйте
SSRFExemptCIDRsдля точного указания - [ ] При обработке URL от пользователей используйте
SecureConfig()
Настройка таймаутов
- [ ] Все значения таймаутов установлены и разумны
- [ ]
TimeoutConfig.Requestне равен 0 (предотвращает бесконечное ожидание) - [ ] Рассмотрите использование
WithContextдля установки таймаута каждого запроса
Ограничения ответов
- [ ]
MaxResponseBodySizeустановлен в разумный предел - [ ]
MaxDecompressedBodySizeустановлен в разумный предел - [ ] При обработке больших ответов используйте потоковую загрузку
Конфигурация повторных попыток
- [ ]
MaxRetriesне превышает 5 - [ ] Для неидемпотентных запросов (POST/PUT/PATCH) используйте повторные попытки с осторожностью
- [ ] Включите
EnableJitterдля предотвращения эффекта стада
Управление ресурсами
- [ ] После использования клиент вызывает
Close() - [ ] Используйте
deferдля гарантии освобождения ресурсов
Рекомендуемые проверки
Промежуточное ПО
- [ ] Используйте
RecoveryMiddleware()для предотвращения падения при panic - [ ] Используйте
LoggingMiddleware()для логирования запросов - [ ] Используйте
MetricsMiddleware()для сбора метрик - [ ] В сценариях с повышенной безопасностью используйте
AuditMiddleware()
Заголовки запросов
- [ ] Установите осмысленный
User-Agent - [ ] Не храните конфиденциальную информацию в заголовках по умолчанию
- [ ] Используйте
WithBearerTokenвместо ручной установки Authorization
Cookie
- [ ] В сценариях с повышенной безопасностью включите проверку
CookieSecurity - [ ] Используйте
StrictCookieSecurityConfig()для принудительного использования безопасных атрибутов
Перенаправления
- [ ] В сценариях с пользовательским вводом URL отключите перенаправления
- [ ] Используйте
RedirectWhitelistдля ограничения целевых доменов перенаправлений
Примеры кода
Создание production-клиента
go
func createProductionClient() (httpc.Client, error) {
cfg := httpc.DefaultConfig()
// Таймауты
cfg.Timeouts.Request = 30 * time.Second
cfg.Timeouts.Dial = 10 * time.Second
cfg.Timeouts.TLSHandshake = 10 * time.Second
cfg.Timeouts.ResponseHeader = 30 * time.Second // транспортный жёсткий предел: применяется ко всем запросам клиента, не переопределяется per-request через WithTimeout; для AI API/долгих ответов ставить 0 и полагаться на Request timeout
// Пул соединений
cfg.Connection.MaxIdleConns = 50
cfg.Connection.MaxConnsPerHost = 10
// Безопасность
cfg.Security.AllowPrivateIPs = false
cfg.Security.MaxResponseBodySize = 10 * 1024 * 1024
// Повторные попытки
cfg.Retry.MaxRetries = 3
cfg.Retry.Delay = 1 * time.Second
cfg.Retry.EnableJitter = true
// Промежуточное ПО
cfg.Middleware.UserAgent = "my-service/1.0"
cfg.Middleware.Middlewares = []httpc.MiddlewareFunc{
httpc.RecoveryMiddleware(),
httpc.LoggingMiddleware(log.Printf),
httpc.RequestIDMiddleware("X-Request-ID", nil),
}
return httpc.New(cfg)
}Безопасный клиент
go
func createSecureClient() (httpc.Client, error) {
cfg := httpc.SecureConfig()
cfg.Security.CookieSecurity = httpc.StrictCookieSecurityConfig()
cfg.Security.RedirectWhitelist = []string{"api.example.com"}
return httpc.New(cfg)
}Команды проверки
bash
# Проверка неправильного использования TestingConfig
grep -r "TestingConfig" --include="*.go" | grep -v "_test.go"
# Проверка InsecureSkipVerify
grep -r "InsecureSkipVerify.*true" --include="*.go" | grep -v "_test.go"
# Проверка AllowPrivateIPs
grep -r "AllowPrivateIPs.*true" --include="*.go" | grep -v "_test.go"Что дальше
- Обзор безопасности - обзор функций безопасности
- Защита от SSRF - подробное описание защиты от SSRF
- Конфигурация API - полный справочник конфигурации