From 8a87fbb63214eb5cf1bcc331c378fe93795dd541 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 9 Jul 2025 16:09:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D0=B0=D1=88=D0=B5=20=D1=81=D0=BE=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B8=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/api/axios.js | 2 +- frontend/src/composables/useChat.js | 4 - md/MASKING_AND_ENCRYPTION_PLAN.md | 37 ---- md/WEBSSH_SETUP_GUIDE.md | 293 ---------------------------- 4 files changed, 1 insertion(+), 335 deletions(-) delete mode 100644 md/MASKING_AND_ENCRYPTION_PLAN.md delete mode 100644 md/WEBSSH_SETUP_GUIDE.md diff --git a/frontend/src/api/axios.js b/frontend/src/api/axios.js index 84002aa..e5f641f 100644 --- a/frontend/src/api/axios.js +++ b/frontend/src/api/axios.js @@ -51,7 +51,7 @@ const sendGuestMessageToServer = async (messageText) => { await axios.post('/chat/guest-message', { message: messageText, // language: userLanguage.value, // TODO: Реализовать получение языка пользователя - }); + }, { withCredentials: true }); } catch (error) { console.error('Ошибка при отправке гостевого сообщения на сервер:', error); } diff --git a/frontend/src/composables/useChat.js b/frontend/src/composables/useChat.js index f87910a..3cf463a 100644 --- a/frontend/src/composables/useChat.js +++ b/frontend/src/composables/useChat.js @@ -278,9 +278,6 @@ export function useChat(auth) { } // Сохраняем гостевое сообщение (если нужно) - // В текущей реализации HomeView гостевые сообщения из localstorage загружаются только при старте - // Если нужна синхронизация после отправки, логику нужно добавить/изменить - /* if (isGuestMessage) { try { const storedMessages = getFromStorage('guestMessages', []); @@ -299,7 +296,6 @@ export function useChat(auth) { console.error('[useChat] Ошибка сохранения гостевого сообщения в localStorage:', storageError); } } - */ hasUserSentMessage.value = true; setToStorage('hasUserSentMessage', true); diff --git a/md/MASKING_AND_ENCRYPTION_PLAN.md b/md/MASKING_AND_ENCRYPTION_PLAN.md deleted file mode 100644 index 69ae5a6..0000000 --- a/md/MASKING_AND_ENCRYPTION_PLAN.md +++ /dev/null @@ -1,37 +0,0 @@ -# План задач по маскировке и шифрованию данных - -## 1. Анализ данных -- [ ] Определить, какие поля и таблицы содержат чувствительные данные (например, email, ФИО, адрес, сообщения, вложения). -- [ ] Составить список полей для маскировки (для user/guest) и для шифрования (для хранения в БД). - -## 2. Маскировка данных (токенизация) -- [ ] Реализовать функцию маскировки на backend (Node.js): - - [ ] Для ролей user/guest возвращать токены вместо реальных данных (например, `token_`). - - [ ] Для admin возвращать реальные значения. -- [ ] Внедрить маскировку в API-эндпоинты, возвращающие списки пользователей, чатов, сообщений и т.д. -- [ ] Обновить frontend для корректного отображения токенов и подсказок (например, «Данные скрыты, доступ только администратору»). - -## 3. Шифрование данных при хранении -- [ ] Выбрать алгоритм шифрования (например, AES-256-GCM). -- [ ] Реализовать функции шифрования/дешифрования на backend для чувствительных полей. -- [ ] Хранить ключи шифрования только в переменных окружения (не в коде и не в БД). -- [ ] Мигрировать существующие данные: зашифровать чувствительные поля в БД. -- [ ] Обновить логику создания/обновления записей: шифровать данные перед сохранением. -- [ ] Обновить логику чтения: расшифровывать данные для admin, возвращать токены для user/guest. - -## 4. Шифрование файлов и вложений -- [ ] Реализовать шифрование файлов/вложений перед сохранением на диск или в облако. -- [ ] Обеспечить расшифровку файлов только для admin. - -## 5. Безопасное хранение ключей -- [ ] Настроить хранение ключей шифрования в переменных окружения (Akash/Flux Cloud). -- [ ] Обновить Dockerfile и инструкции деплоя для поддержки секретов. - -## 6. Тестирование и аудит -- [ ] Провести тестирование маскировки и шифрования для всех ролей. -- [ ] Проверить, что admin видит реальные данные, user/guest — только токены. -- [ ] Провести аудит безопасности (внешний или внутренний). - -## 7. Документация -- [ ] Описать логику маскировки и шифрования в README или отдельном разделе. -- [ ] Добавить инструкции по настройке переменных окружения и деплою на Akash/Flux Cloud. \ No newline at end of file diff --git a/md/WEBSSH_SETUP_GUIDE.md b/md/WEBSSH_SETUP_GUIDE.md deleted file mode 100644 index f3ade61..0000000 --- a/md/WEBSSH_SETUP_GUIDE.md +++ /dev/null @@ -1,293 +0,0 @@ -# Руководство по настройке WEB SSH - -## Обзор - -Система WEB SSH позволяет автоматически публиковать локальное Vue.js приложение в интернете через SSH-туннель и NGINX на удаленном сервере. - -## Архитектура - -``` -┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐ -│ Vue.js Frontend │───▶│ WebSSH Agent │───▶│ VPS Server │ -│ (localhost:5173) │ │ (localhost:12345) │ │ (ваш сервер) │ -└─────────────────────┘ └─────────────────────┘ └─────────────────────┘ - │ │ - │ ▼ - │ ┌─────────────────────┐ - │ │ NGINX + SSL │ - │ │ (порт 80/443) │ - │ └─────────────────────┘ - │ │ - │ ▼ - │ ┌─────────────────────┐ - └─────────────▶│ SSH Reverse Tunnel │ - │ (порт 9000) │ - └─────────────────────┘ -``` - -## Требования - -### Локальная машина -- ✅ Node.js 16+ -- ✅ SSH клиент -- ✅ Docker и Docker Compose -- ✅ Yarn - -### Удаленный сервер (VPS) -- ✅ Ubuntu/Debian или CentOS/RHEL -- ✅ SSH доступ с правами sudo/root -- ✅ Открытые порты 80, 443, 22 -- ✅ Домен, указывающий на IP сервера - -## Установка и настройка - -### 1. Запуск основного приложения - -```bash -# Клонируйте проект -git clone -cd DApp-for-Business - -# Запустите приложение -docker-compose up -d - -# Убедитесь, что фронтенд доступен -curl http://localhost:5173 -``` - -### 2. Установка WebSSH Agent - -```bash -# Перейдите в директорию агента -cd webssh-agent - -# Установите зависимости -npm install - -# Запустите агент -npm start -# или в фоновом режиме: -nohup node agent.js > agent.log 2>&1 & -``` - -### 3. Проверка работы агента - -```bash -# Проверьте статус агента -curl http://localhost:12345/health - -# Ожидаемый ответ: -# {"status":"ok","timestamp":"2025-07-06T18:08:57.789Z","version":"1.0.0","tunnelConnected":false} -``` - -## Использование - -### 1. Подготовка SSH ключей - -```bash -# Создайте SSH ключ (если еще нет) -ssh-keygen -t rsa -b 4096 -C "webssh@yourdomain.com" - -# Скопируйте публичный ключ на сервер -ssh-copy-id -i ~/.ssh/id_rsa.pub user@your-server.com - -# Проверьте подключение -ssh -i ~/.ssh/id_rsa user@your-server.com -``` - -### 2. Настройка через веб-интерфейс - -1. Откройте приложение: `http://localhost:5173` -2. Перейдите в **Настройки** → **WEB SSH** -3. Заполните форму: - -#### Обязательные поля: -- **Домен**: `example.com` (ваш домен) -- **Email для SSL**: `admin@example.com` (для Let's Encrypt) -- **SSH Host/IP**: `192.168.1.100` или `server.example.com` -- **SSH Пользователь**: `root` или ваш пользователь -- **SSH Приватный ключ**: содержимое файла `~/.ssh/id_rsa` - -#### Дополнительные настройки (заполняются автоматически): -- **Локальный порт**: `5173` (порт Vue.js приложения) -- **Порт сервера**: `9000` (порт для SSH туннеля) -- **SSH порт**: `22` (стандартный SSH порт) - -4. Нажмите **"Опубликовать"** - -### 3. Процесс публикации - -После нажатия "Опубликовать" агент автоматически: - -1. ✅ Подключается к вашему серверу по SSH -2. ✅ Устанавливает NGINX и certbot (если не установлены) -3. ✅ Создает конфигурацию NGINX для вашего домена -4. ✅ Перезапускает NGINX -5. ✅ Получает SSL сертификат через Let's Encrypt -6. ✅ Создает SSH reverse-туннель -7. ✅ Ваше приложение становится доступным по адресу `https://yourdomain.com` - -## Управление туннелем - -### Через веб-интерфейс -- **Статус**: отображается в верхней части страницы -- **Отключить**: кнопка "Отключить" при активном туннеле -- **Логи**: отображаются в нижней части страницы - -### Через API -```bash -# Статус туннеля -curl http://localhost:12345/tunnel/status - -# Создание туннеля -curl -X POST http://localhost:12345/tunnel/create \ - -H "Content-Type: application/json" \ - -d '{ - "domain": "example.com", - "email": "admin@example.com", - "sshHost": "192.168.1.100", - "sshUser": "root", - "sshKey": "-----BEGIN OPENSSH PRIVATE KEY-----\n...", - "localPort": 5173, - "serverPort": 9000, - "sshPort": 22 - }' - -# Отключение туннеля -curl -X POST http://localhost:12345/tunnel/disconnect -``` - -## Безопасность - -### Локальная безопасность -- ✅ Агент принимает соединения только с localhost -- ✅ SSH ключи хранятся временно и удаляются после отключения -- ✅ Все операции логируются - -### Серверная безопасность -- ✅ Используется HTTPS с автоматическими SSL сертификатами -- ✅ NGINX настроен с безопасными заголовками -- ✅ SSH туннель использует приватные ключи - -## Устранение неполадок - -### Агент не запускается -```bash -# Проверьте порт -netstat -tulpn | grep 12345 - -# Проверьте логи -tail -f webssh-agent/agent.log - -# Убейте процесс и перезапустите -pkill -f "node agent.js" -nohup node agent.js > agent.log 2>&1 & -``` - -### SSH соединение не устанавливается -```bash -# Проверьте SSH ключ -ssh -i ~/.ssh/id_rsa user@server - -# Проверьте доступность сервера -ping your-server.com - -# Проверьте SSH порт -telnet your-server.com 22 -``` - -### NGINX не настраивается -```bash -# На сервере проверьте NGINX -sudo nginx -t -sudo systemctl status nginx - -# Проверьте логи -sudo tail -f /var/log/nginx/error.log -``` - -### SSL сертификат не получается -```bash -# Проверьте DNS -nslookup your-domain.com - -# Проверьте доступность домена -curl -I http://your-domain.com - -# На сервере проверьте certbot -sudo certbot certificates -sudo tail -f /var/log/letsencrypt/letsencrypt.log -``` - -### Туннель не работает -```bash -# Проверьте процесс SSH -ps aux | grep ssh - -# Проверьте порты на сервере -sudo netstat -tulpn | grep 9000 - -# Проверьте логи агента -tail -f webssh-agent/agent.log -``` - -## Примеры использования - -### Разработка -```bash -# Запустите локальное приложение -docker-compose up -d - -# Запустите агент -cd webssh-agent && npm start - -# Настройте туннель через веб-интерфейс -# Ваше приложение доступно по https://yourdomain.com -``` - -### Демонстрация клиентам -```bash -# Быстрая публикация для демо -# 1. Заполните форму в веб-интерфейсе -# 2. Нажмите "Опубликовать" -# 3. Отправьте клиенту ссылку https://yourdomain.com -``` - -### Тестирование на мобильных устройствах -```bash -# Опубликуйте приложение -# Теперь можете тестировать на любых устройствах -# через https://yourdomain.com -``` - -## Файловая структура - -``` -DApp-for-Business/ -├── webssh-agent/ # Локальный агент -│ ├── agent.js # Основной файл агента -│ ├── package.json # Зависимости -│ ├── install.sh # Установочный скрипт -│ └── README.md # Документация агента -├── frontend/ # Vue.js приложение -│ ├── src/ -│ │ ├── views/settings/ -│ │ │ └── WebSshSettingsView.vue # Страница настроек -│ │ └── services/ -│ │ └── webSshService.js # Сервис для работы с агентом -│ └── ... -└── docker-compose.yml # Конфигурация Docker -``` - -## Поддержка - -Если у вас возникли проблемы: - -1. Проверьте этот документ -2. Посмотрите логи агента: `tail -f webssh-agent/agent.log` -3. Проверьте статус: `curl http://localhost:12345/health` -4. Создайте Issue в репозитории проекта - -## Лицензия - -MIT License \ No newline at end of file