Обзор безопасности
Библиотека HTML разработана с приоритетом безопасности и включает встроенные многоуровневые механизмы защиты.
Функции безопасности
Ограничение размера ввода
По умолчанию максимальный размер ввода — 50 МБ, предотвращает исчерпание памяти:
cfg := html.DefaultConfig()
cfg.MaxInputSize = 10 * 1024 * 1024 // Настройка на 10 МБОграничение глубины DOM
По умолчанию максимальная глубина — 500, предотвращает атаки с рекурсивными бомбами:
cfg.MaxDepth = 200 // Усиление ограниченияЗащита от обхода пути
Файловые операции автоматически обнаруживают и блокируют попытки обхода пути (например, ../../../etc/passwd) и записывают их через систему аудита.
Восстановление после паники
Все операции извлечения включают встроенный механизм восстановления panic, возвращающий ошибку ErrInternalPanic, что гарантирует, что сервис не выйдет из строя из-за злонамеренного ввода.
Тайм-аут обработки
Настраиваемый тайм-аут обработки предотвращает бесконечную обработку злонамеренного HTML:
cfg.ProcessingTimeout = 10 * time.SecondОчистка контента
Опциональная функция очистки контента, удаляющая потенциально опасные теги и атрибуты:
cfg.EnableSanitization = trueСистема аудита
Подробная конфигурация безопасности аудита описана в Система аудита.
Система аудита может записывать следующие события безопасности:
| Событие | Описание |
|---|---|
AuditEventBlockedTag | Заблокированные HTML-теги |
AuditEventBlockedAttr | Заблокированные атрибуты |
AuditEventBlockedURL | Заблокированные URL |
AuditEventInputViolation | Нарушения размера ввода |
AuditEventDepthViolation | Нарушения глубины DOM |
AuditEventPathTraversal | Попытки обхода пути |
AuditEventTimeout | Тайм-ауты обработки |
AuditEventEncodingIssue | Аномалии кодировки |
Конфигурация высокой безопасности
cfg := html.HighSecurityConfig()
// Автоматически включает: ужесточённые ограничения, более короткие тайм-ауты, полный аудитОбработка ошибок
Все нарушения безопасности возвращают чёткие ошибки с поддержкой errors.Is / errors.As:
result, err := html.Extract(data)
if err != nil {
switch {
case errors.Is(err, html.ErrInputTooLarge):
// Записать и отклонить
case errors.Is(err, html.ErrMaxDepthExceeded):
// Возможно злонамеренная конструкция
case errors.Is(err, html.ErrInternalPanic):
// Восстановление после паники, проверить ввод
}
}