# Руководство по безопасности проекта КЛГ АСУ ТК ## 1. Секреты и переменные окружения - **Никогда не коммитьте** файлы `.env`, `.env.local`, `.env.production` и любые файлы с реальными ключами. - Используйте **`.env.example`** как шаблон: копируйте в `.env` или `.env.local` и подставляйте значения только локально. - В продакшене храните секреты в защищённом хранилище (переменные окружения платформы, vault), не в коде. - В `.gitignore` добавлены: `.env`, `.env.*`, `!.env.example`, `certs/`, `*.pem`, `*.key`. ## 2. Защита от XSS и инъекций - Не используйте `dangerouslySetInnerHTML` с пользовательским вводом. - Для инлайн-скриптов используйте компонент `next/script` (как в `app/layout.tsx`). - Санитизация: для пользовательского контента используйте `DOMPurify` или аналог. - **Не используйте `eval()`** — риск code injection. ## 3. CORS и API - CORS настроен только на разрешённые домены. В продакшене запрещён wildcard `*`. - Бэкенд: переменная `CORS_ORIGINS` — список доменов через запятую. ## 4. Авторизация - В production отключите dev-обход: `ENABLE_DEV_AUTH=false` на бэкенде, не используйте `NEXT_PUBLIC_DEV_TOKEN` в проде. - Токены и сессии передавайте по HTTPS; при необходимости используйте httpOnly cookies. ## 5. Логирование и отладка - В коде используйте **logger** (`lib/logger.ts` на фронте, `logging` на бэкенде), а не `console.log`. - ESLint: правило `no-console` в режиме error (допускаются только `console.warn` и `console.error`). - Перед коммитом запускайте `npm run lint`. Pre-commit хук (Husky) может проверять линт и тесты. ## 6. Проверка перед коммитом - Убедитесь, что `.env` файлы в `.gitignore` и не попадают в коммит. - Проверьте отсутствие `eval()` в коде: `grep -r "eval(" .` - Убедитесь, что отладочные логи вынесены в logger, а не в `console.log`. ## 7. Отчёт об уязвимостях - Обнаруженные уязвимости сообщайте ответственным за безопасность (например, security@company.com или через приватный канал). - Не создавайте публичные issue с описанием уязвимостей до их устранения.