Skip to content

امنیت و معماری ​

NotifyTrap به‌عنوان یک مونو‌لیت ماژولار (Modular Monolith) پیاده‌سازی شده که در یک فرایند دسکتاپ واحد و بدون وابستگی ابری اجرا می‌شود.

معماری لایه‌ای در Rust (src-tauri/src/) ​

لایهمسئولیت
domain/مدل‌های هسته، وضعیت‌ها، قوانین اعتبارسنجی و نوع‌های خطای دامین (thiserror)
application/سرویس‌های کاربردی و Use Caseها برای شکار، مدیریت کانال‌ها و جست‌وجو
infrastructure/پیاده‌سازی SQLite، رمزنگاری AES-256-GCM، پالایشگر HTML (ammonia) و سرویس Keyring
services/سرورهای لوکال Axum (HTTP) و Tokio (SMTP) در تردهای ایزوله پس‌زمینه
commands/ و events/پل ارتباطی امن بین فرانت‌اند Nuxt و لایه application در Tauri IPC

لایه‌های امنیتی اصلی ​

۱. ایزولاسیون محتوای HTML ایمیل و پیوست‌های cid: ​

بدنه ایمیل‌ها پیش از ارسال به UI توسط کتابخانه ammonia در بک‌اند Rust پالایش می‌شوند تا تگ‌ها و صفت‌های ناامن (مانند <script>، on* و <img>های ریموت http:///https:// ردیاب) حذف شوند و فقط تصاویر درون‌خطی cid: مجاز بمانند. در فرانت‌اند نیز تصاویر cid: به‌صورت محلی از SQLite به data: URI تبدیل شده و در <iframe sandbox="" referrerpolicy="no-referrer"> با سیاست سخت‌گیرانه script-src 'none'; connect-src 'none'; img-src data:; رندر می‌شوند (پیش‌نمایش SVG درون‌برنامه‌ای مسدود است).

۲. رمزنگاری Credentialها و نگهداری کلید ​

  • کلید اصلی رمزنگاری در Keyring بومی سیستم‌عامل (macOS Keychain، Windows Credential Manager یا Linux Secret Service) نگهداری می‌شود.
  • برای محیط‌هایی که Secret Service در سیستم‌عامل راه‌اندازی نشده باشد، مسیر fallback لوکال رمزنگاری‌شده با محدودیت سطح دسترسی فایل (0600) پیش‌بینی شده تا در نشست‌های بعدی همچنان قابلیت Reveal حفظ شود.
  • هنگام احراز هویت دریافتی، مقایسه هش با زمان ثابت (constant-time comparison) انجام می‌شود.

۳. بدون ارسال به بیرون (Zero External Delivery) ​

هیچ منطقی برای فوروارد ایمیل، رله SMTP یا فراخوانی URLهای خارجی وجود ندارد. شما می‌توانید با خیال راحت از داده‌های واقعی یا تولیدی همتاسازی‌شده در محیط توسعه بدون ریسک ارسال تصادفی به کاربران واقعی استفاده کنید.

۴. استخراج آفلاین OTP و کوئری‌های ایزوله ​

  • کدهای OTP و لینک‌های تایید به‌صورت قطعی در ماژول domain/verification_extractor.rs هنگام خواندن استخراج می‌شوند و توکن اضافی در دیتابیس ذخیره نمی‌شود.
  • برچسب تست X-NotifyTrap-Run (مایگریشن 0003_add_test_run_identifier.sql) و مسیرهای GET /api/v1/notifications* با اعتبارسنجی ثابت‌زمان کلید کانال ایزوله شده‌اند.

۵. بازپخش انحصاری Loopback و قوانین Chaos (v1.3.0) ​

  • بازپخش وب‌هوک مستقیماً روی tokio::net::TcpStream (infrastructure/http/loopback_replay.rs) اجرا می‌شود و منحصراً آدرس‌های http://127.0.0.1، http://localhost و http://[::1] (بدون userinfo و fragment) را با سقف پاسخ ۱ مگابایت می‌پذیرد.
  • تنظیمات Mock و Chaos در ستون‌های webhook_mock_json و chaos_rule_json (مایگریشن 0004_add_channel_rules.sql) ذخیره شده و فقط روی شنونده‌های محلی HTTP و SMTP اعمال می‌شوند.

Released under the MIT License — Local-First Development Utility.