klg-asutk-app/SECURITY.md
Yuriy aa052763f6 Безопасность и качество: 8 исправлений + обновления
- .env.example: полный шаблон, защита секретов
- .gitignore: явное исключение .env.* и секретов
- layout.tsx: XSS — заменён dangerouslySetInnerHTML на next/script для SW
- ESLint: no-console error (allow warn/error), ignore scripts/
- scripts/remove-console-logs.js: очистка console.log без glob
- backend/routes/modules: README с планом рефакторинга крупных файлов
- SECURITY.md: гид по секретам, XSS, CORS, auth, линту
- .husky/pre-commit: запуск npm run lint

+ прочие правки приложения и бэкенда

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-14 21:29:16 +03:00

35 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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