security: 🔒 N8N webhook URLs спрятаны через backend proxy

- Создан n8n_proxy.py для безопасного проксирования запросов
- Webhook URLs перенесены в .env (скрыты от фронтенда)
- Frontend теперь использует /api/n8n/* endpoints
- Добавлена документация SECURITY_N8N_PROXY.md

Преимущества:
- Webhook URLs не видны в DevTools
- Централизованное логирование
- Возможность добавить rate limiting и auth
- Легко менять URLs без пересборки фронтенда
This commit is contained in:
AI Assistant
2025-10-29 16:49:03 +03:00
parent f12416a901
commit ef6a4160a4
6 changed files with 489 additions and 6 deletions

View File

@@ -196,8 +196,9 @@ export default function Step1Policy({ formData, updateFormData, onNext, addDebug
addDebugEvent?.('policy_check', 'pending', `Проверяю полис: ${values.voucher}`, { voucher: values.voucher });
// Проверка полиса через n8n вебхук + создание записи в БД
const response = await fetch('https://n8n.clientright.pro/webhook/9eb7bc5b-645f-477d-a5d8-5a346260a265', {
// Проверка полиса через backend API (proxy к n8n)
const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:8100';
const response = await fetch(`${API_BASE_URL}/api/n8n/policy/check`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
@@ -317,7 +318,8 @@ export default function Step1Policy({ formData, updateFormData, onNext, addDebug
uploadFormData.append('file', pdfFile); // PDF файл!
setUploadProgress(`📡 Загружаем ${pdfFile.name} в облако...`);
const uploadResponse = await fetch('https://n8n.clientright.pro/webhook/7e2abc64-eaca-4671-86e4-12786700fe95', {
const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:8100';
const uploadResponse = await fetch(`${API_BASE_URL}/api/n8n/upload/file`, {
method: 'POST',
body: uploadFormData,
});

View File

@@ -151,8 +151,9 @@ const StepDocumentUpload: React.FC<Props> = ({
eventSource.close();
};
// Отправляем файл на сервер (n8n webhook)
const response = await fetch('https://n8n.clientright.pro/webhook/7e2abc64-eaca-4671-86e4-12786700fe95', {
// Отправляем файл на сервер через backend API (proxy к n8n)
const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:8100';
const response = await fetch(`${API_BASE_URL}/api/n8n/upload/file`, {
method: 'POST',
body: formDataToSend,
});