---
sidebar_label: "Обзор безопасности"
title: "Обзор безопасности - CyberGo env | Архитектура безопасности"
description: "Безопасность CyberGo env: SecureValue с mlock и обнулением, фильтр управляющих символов, запрещённые PATH/LD_PRELOAD, IsSensitiveKey, пресеты и аудит."
sidebar_position: 1
---

# Обзор безопасности

Переменные окружения часто хранят конфиденциальную информацию, поэтому безопасная обработка имеет решающее значение. В этом документе представлен обзор архитектуры безопасности и основных возможностей библиотеки env.

## Архитектура безопасности

```text
┌──────────────────────────────────────────────────────────────┐
│                        Уровень приложения                     │
├──────────────────────────────────────────────────────────────┤
│   SecureValue   │   Маскирование  │   Обнуление  │  Блокировка памяти │
├──────────────────────────────────────────────────────────────┤
│                        Уровень Loader                         │
├──────────────────────────────────────────────────────────────┤
│    Валидация ключей  │  Валидация значений  │  Запрещённые ключи  │  Ограничения размера  │
├──────────────────────────────────────────────────────────────┤
│                        Уровень парсинга                       │
├──────────────────────────────────────────────────────────────┤
│    Определение формата  │  Проверка подстановки  │  Валидация пути  │
└──────────────────────────────────────────────────────────────┘
```

## Основные возможности безопасности

| Возможность | Описание | Документация |
|------|------|------|
| **SecureValue** | Защита чувствительных значений в памяти, автоматическое обнуление | [SecureValue API](/ru/env/api-reference/secure-value) |
| **Запрещённые ключи** | Предотвращение изменения критических системных переменных | [Константы и ошибки](/ru/env/api-reference/constants#defaultforbiddenkeys) |
| **Обнаружение чувствительных ключей** | Автоматическая идентификация чувствительных конфигурационных ключей | [Константы и ошибки](/ru/env/api-reference/constants#sensitivekeypatterns) |
| **Валидация значений** | Обнаружение управляющих символов, нулевых байтов и др. | [Config API](/ru/env/api-reference/config) |
| **Аудитный журнал** | Полное отслеживание операций | [Фабрика компонентов](/ru/env/api-reference/factory#фабрика-обработчиков-аудита) |

## Введение в SecureValue

Для конфиденциальных данных используйте `GetSecure` вместо `GetString`:

```go
// Не рекомендуется
password := env.GetString("DB_PASSWORD")

// Рекомендуется
secret := env.GetSecure("DB_PASSWORD")
defer secret.Close()
password := secret.Reveal()  // Вызывать только когда нужно открытое значение
```

**Основные возможности:**
- **Блокировка памяти** - Предотвращение swap на диск (Linux/macOS/Windows/FreeBSD)
- **Автоматическое обнуление** - Безопасная очистка памяти при вызове `Close()`
- **Маскированный вывод** - `Masked()` для вывода в логи
- **Потокобезопасность** - Поддержка параллельного чтения

::: tip Полный API
Подробнее см. [SecureValue API](/ru/env/api-reference/secure-value).
:::

## Валидация ключей и значений

### Валидация ключей

Правила имён ключей по умолчанию: `^[A-Za-z][A-Za-z0-9_]*$`

- Начинается с буквы
- Содержит только буквы, цифры и символы подчёркивания
- Длина не превышает `MaxKeyLength`

### Запрещённые ключи

Встроенные запрещённые ключи предотвращают изменение критических системных переменных:

| Категория | Примеры | Риск |
|------|------|------|
| Системные пути | `PATH`, `LD_LIBRARY_PATH` | Перехват команд/библиотек |
| Динамическая линковка | `LD_PRELOAD`, `DYLD_INSERT_LIBRARIES` | Инъекция вредоносных библиотек |
| Shell | `SHELL`, `IFS`, `BASH_ENV` | Перехват Shell |
| Среды выполнения | `PYTHONPATH`, `NODE_PATH` | Перехват модулей |

::: tip Полный список
Полный список запрещённых ключей см. в [DefaultForbiddenKeys](/ru/env/api-reference/constants#defaultforbiddenkeys).
:::

### Валидация значений

Включение валидации значений для обнаружения потенциальных опасностей:

```go
cfg := env.ProductionConfig()
cfg.ValidateValues = true  // Обнаружение управляющих символов, нулевых байтов и др.
```

## Основы безопасности файлов

### Права доступа к файлам

```bash
# Только владелец может читать и писать
chmod 600 .env

# Или более строго (только чтение)
chmod 400 .env
```

### Игнорирование в Git

```bash
.env
.env.local
.env.*.local
*.pem
*.key
```

## Уровни безопасности конфигурации

| Предустановка | Назначение | Особенности |
|------|------|------|
| `DevelopmentConfig()` | Среда разработки | Мягкие ограничения, поддержка YAML-синтаксиса |
| `TestingConfig()` | Тестовая среда | Перекрывает существующие переменные, изоляция тестов |
| `ProductionConfig()` | Производственная среда | Строгая валидация + аудитный журнал, не перекрывает существующие переменные |

```go
// Рекомендуемая конфигурация для производственной среды
cfg := env.ProductionConfig()
cfg.RequiredKeys = []string{"DB_HOST", "API_KEY"}
cfg.AllowedKeys = []string{"APP_NAME", "PORT", "DB_HOST", "API_KEY"}
```

## Связанная документация

- [SecureValue API](/ru/env/api-reference/secure-value) - Полный API для безопасной обработки значений
- [Константы и ошибки](/ru/env/api-reference/constants) - Полный список запрещённых ключей, шаблоны чувствительных ключей
- [Контрольный список для продакшена](/ru/env/security/production-checklist) - Проверка безопасности перед запуском
