---
sidebar_label: "Контрольный список для продакшена"
title: "Чек-лист продакшена - CyberGo html | безопасность"
description: "Чек-лист безопасности CyberGo html для продакшена: пресет HighSecurityConfig, жизненный цикл Processor, аудит, тайм-ауты контекста и обработка ошибок."
sidebar_position: 2
---

# Контрольный список для продакшена

## Базовая конфигурация

- [ ] Использовать `HighSecurityConfig()` или пользовательскую конфигурацию безопасности
- [ ] Установить разумный `MaxInputSize` (в зависимости от бизнес-требований)
- [ ] Установить `ProcessingTimeout` для предотвращения длительных блокировок
- [ ] Настроить `MaxDepth` для ограничения глубины DOM
- [ ] Включить `EnableSanitization` для очистки контента

## Жизненный цикл Processor

- [ ] Использовать `defer p.Close()` для корректного освобождения Processor
- [ ] Не использовать Processor после закрытия
- [ ] Рассмотреть использование Singleton Processor для повторного использования ресурсов

```go
p, err := html.New(html.HighSecurityConfig())
if err != nil {
    log.Fatal(err)
}
defer p.Close()
```

## Аудит и мониторинг

- [ ] Включить систему аудита
- [ ] Настроить соответствующую фильтрацию по уровням аудита
- [ ] Использовать `WriterAuditSink` для постоянного хранения журнала аудита
- [ ] Отслеживать счётчик ошибок в `GetStatistics()`
- [ ] Обращать внимание на ошибки `ErrInternalPanic` и события аудита `AuditEventPathTraversal`

```go
auditFile, _ := os.OpenFile("audit.jsonl", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
defer auditFile.Close()

cfg := html.HighSecurityConfig()
cfg.Audit.Sink = html.NewWriterAuditSink(auditFile)
```

## Контекст и тайм-ауты

- [ ] Использовать версии `ExtractWithContext` для всех операций извлечения
- [ ] Установить разумный тайм-аут контекста
- [ ] Использовать контекст с отменой для пакетных операций

```go
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel()
result, err := html.ExtractWithContext(ctx, data)
```

## Обработка ошибок

- [ ] Разделять бизнес-ошибки и ошибки безопасности
- [ ] Записывать все `ErrInputTooLarge` и `ErrMaxDepthExceeded`
- [ ] Отслеживать частоту `ErrInternalPanic`
- [ ] Для `ErrFileNotFound` проверять `SafePath()` вместо исходного сообщения об ошибке

## Управление ресурсами

- [ ] Пакетные операции не более 10 000 элементов за раз
- [ ] Разумно настроить `WorkerPoolSize`
- [ ] Регулярно вызывать `ClearCache()` для освобождения кэша
- [ ] Мониторить использование памяти и процент попаданий в кэш

## Обработка файлов

- [ ] Проверять источник пути к файлу (предотвращение управления путём пользователем)
- [ ] Ограничивать каталог чтения файлов
- [ ] Проверять размер файла перед обработкой
