Безопасность и конфиденциальность
Техническая информация об обработке данных, мерах защиты и рекомендациях по безопасному использованию.
Как обрабатываются конфиги
Конфиг генерируется на сервере: параметры формы передаются в Jinja2-шаблон через FastAPI backend. Конфиг рендерится в памяти и возвращается в ответе API. Без создания share-ссылки конфиг не сохраняется ни в базе данных, ни в логах.
Внешние AI/LLM API при генерации не задействуются. Валидация работает через отдельный nginxforge_validator контейнер внутри инфраструктуры.
nginx -t в изолированном Docker-контейнере. Если validator-контейнер недоступен, сервис возвращает valid: null вместо false.
Что хранится в базе данных
| Таблица | Что хранится | Когда | TTL |
|---|---|---|---|
| shared_configs | slug, текст конфига, сценарий, params JSON, SHA-256(IP), view_count | При создании share-ссылки | 30 дней |
| generation_stats | сценарий, флаг SSL, флаг docker_export, timestamp | После каждой генерации и экспорта | Без TTL (агрегированная статистика) |
| directives | аннотации директив (статичные данные) | Seed при деплое | Без TTL |
| templates | шаблоны стеков (статичные данные) | Seed при деплое | Без TTL |
| feedback | тип обращения, текст сообщения, email (если указан), page_url, SHA-256(IP), can_contact | При отправке обратной связи | Без TTL (хранится для анализа) |
generation_stats не содержит текст конфига, IP, параметры формы — только агрегированные счётчики для внутренней аналитики.
Обращения, отправленные через форму обратной связи, сохраняются в базе данных и доступны администратору сервиса для ручной обработки. Email указывается только если пользователь явно дал согласие на обратный контакт.
Что не хранится
- Конфиг не сохраняется без явного создания share-ссылки
- IP-адрес не хранится — только SHA-256 хэш (необратимый)
- Cookies аутентификации не используются
- Параметры формы не логируются
- История генераций без привязки к пользователю не ведётся
- Внешние AI/LLM API при генерации не вызываются
Текущие меры защиты
| Мера | Статус | Детали |
|---|---|---|
| HTTPS | ✓ Включён | TLSv1.2 + TLSv1.3, Let's Encrypt |
| HSTS | ✓ Включён | max-age=31536000; includeSubDomains |
| X-Frame-Options | ✓ Включён | DENY |
| X-Content-Type-Options | ✓ Включён | nosniff |
| Rate limiting /generate | ✓ 30/min per IP | slowapi + FastAPI middleware |
| Rate limiting /validate | ✓ 30/min per IP | slowapi + FastAPI middleware |
| Rate limiting /share | ✓ 10/hour per IP | slowapi + FastAPI middleware |
| Pydantic-валидация входных данных | ✓ Включена | Все API endpoints |
| SQLite WAL mode | ✓ Включён | journal_mode=WAL, synchronous=NORMAL |
| SHA-256 хэш IP | ✓ В shared_configs | hashlib.sha256 |
| Автоудаление просроченных shares | ✓ APScheduler | Каждую ночь в 03:00 MSK |
| Nginx backend — reverse proxy | ✓ | FastAPI за nginx, не напрямую |
Как безопасно использовать NginxForge
server_name, пути к сертификатам и другие параметры формы могут попасть в конфиг, который вы создадите как share-ссылку. Заменяйте реальные домены на example.com, реальные пути — на типовые перед шарингом.
https://nginxforge.ru/s/{slug}, может открыть конфиг. Ссылки не защищены паролем.
nginx -t на целевом сервере перед деплоем. Генератор создаёт типичный конфиг, но не знает особенностей вашей инфраструктуры.
Границы ответственности
NginxForge помогает сформировать и проверить конфиг, но не заменяет финальную верификацию в вашем окружении. Пользователь самостоятельно несёт ответственность за продакшен-деплой. Аннотации и предупреждения носят справочный характер и не являются гарантией корректной архитектуры для конкретного use case.
Сообщить о проблеме безопасности
Если вы обнаружили уязвимость или проблему безопасности:
security@nginxforge.ru
Пожалуйста, не публикуйте уязвимости в открытых каналах до получения ответа.
Срок ответа — до 72 часов.