رابط کاربری¶
SPA از چیدمان یکپارچه داشبورد استفاده میکند: نوار بالا برای اقدامات سراسری، سایدبار یکپارچه (SubNav) و محتوای اصلی تبدار. تصاویر زیر همان رابط را با زبان فارسی (RTL) نشان میدهند؛ برای زبانهای دیگر نسخهٔ محلی همان فصل را ببینید.
با تغییر زبان در نوار بالا، برچسبهای منو، عناوین تبها و نام منابع داخلی به زبان انتخابشده نمایش داده میشوند؛ جهت صفحه برای فارسی و عربی RTL و برای سایر زبانها LTR است.
نواحی چیدمان¶
نوار بالا تعداد ابزار پشته، انتخاب زبان، تعویض تم (روشن / تاریک / سیستم)، کلیدهای نظارت زنده، اعلانها، تازهسازی خودکار و اسکن کامل را در یک ردیف قرار میدهد. منوی خروجی (CSV، JSON، چاپ) با نقشهای ARIA و بستن با Escape و کلیک بیرون در دسترس است؛ CSV فیلدهای EPSS، امتیاز ریسک، نوع، نسخهها، توضیح کوتاهشده و aliasها را همراه با سطر توضیح تاریخ اسکن و پشته میدهد؛ JSON یافتهها را در پوشش exported_at، پشته، منابع و تعداد میپیچد. چاپ با stylesheet جداگانه نوار و سایدبار را پنهان میکند. در عرض کم، دکمهٔ منو SubNav را بهصورت کشویی باز میکند.
SubNav (سایدبار راست در RTL) شامل عنوان محصول، نشان نظارت زنده، ناوبری اصلی، فهرست ابزارهای پشته با تعداد CVE، فیلتر سریع شدت (در تب آسیبها)، منابع داده با آخرین بهروزرسانی و خلاصهٔ اسکن بر اساس شدت است. کنترل جمعشدن سایدبار را به حالت آیکون محدود میکند.
| تب | کاربرد |
|---|---|
| داشبورد | معیارها، نمودارها، لیست بحرانی، کارت ابزار کلیکپذیر |
| آسیبها | جستجو، فیلتر، کارت CVE قابل گسترش |
| نظارت زنده | بازهٔ watch، شمارش معکوس، CVEهای جدید از آخرین اسکن، تاریخچهٔ poll |
| تاریخچهٔ اسکن | نمودار روند و اسکنهای اخیر (PostgreSQL، محدود به tenant) |
| زیرساخت | ویرایش پشته، زیرناوبری تنظیمات (منابع، اعلانها، عملیات، مستاجران، ظاهر) |
تب هشدارها
تب جداگانهٔ «تاریخچه هشدار» حذف شده است؛ اعلانهای جدید همچنان از بنر و toast نمایش داده میشوند.
داشبورد¶
پس از اسکن کامل، داشبورد خلاصهٔ شدت، نمودار توزیع، ابزارهای تحت تأثیر و فهرست CVEهای بحرانی را نشان میدهد. معیارهای KEV / بهرهبرداری در طبیعت و تصحیح موجود سیگنالهای بهرهبرداری و رفع آسیب را خلاصه میکنند. پنل صحت منابع هر فید را از آخرین اسکن (sources_checked / sources_failed) فهرست میکند. کارتهای ابزار تعداد KEV و تصحیح را برای هر سرویس نشان میدهند. کلیک روی کارت ابزار شما را به تب آسیبها با فیلتر همان ابزار میبرد.
شکل ۱ — تب داشبورد پس از اسکن (زبان فارسی، تم روشن)
تب آسیبپذیریها¶
جستجوی متنی، فیلتر شدت / نوع / ابزار / منبع، گزینهٔ فقط KEV، مرتبسازی (شامل EPSS و امتیاز ریسک) و کارتهای قابل گسترش. کارتهای CVE در صورت وجود دادهٔ غنیسازی، نشانهای جداگانهٔ EPSS و امتیاز ریسک دارند. کلیک روی برچسبهای شدت، نوع، منبع یا KEV روی کارت، همان فیلتر را در این تب اعمال میکند. وقتی merge همان CVE را از چند منبع ادغام میکند (مثلاً NVD + GitHub)، شناسههای جایگزین (GHSA، PYSEC و …) در بدنهٔ گسترشیافتهٔ کارت بهصورت chip با جهت LTR اجباری نمایش داده میشوند.
شکل ۲ — تب آسیبها با فیلترها و کارتهای CVE
تب زیرساخت (پشته)¶
تب زیرساخت محل تنظیمات پایدار است: ابزارهای پشته، رفتار اسکن، منابع داده، دید اعلانها و ترجیحات نمایش. زیرناوبری تنظیمات افقی بین بخشها جابهجا میشود بدون ترک تب. مقادیر در localStorage مرورگر با پیشوند cve-radar:* ذخیره میشوند. با فعال بودن PostgreSQL، بخشهای عملیات و مستاجران متادیتای نشست سرور و پشتههای هر tenant را نشان میدهند.
شکل ۳ — زیرناوبری زیرساخت: پشته و نظارت سریع (فارسی)
| بخش زیرناوبری | محتوا |
|---|---|
| زیرساخت | ابزار پشته، پیشتنظیمها، بازهٔ watch، اسکن دورهای کامل |
| منابع | فیدهای CVE داخلی و RSS سفارشی |
| اعلانها | وضعیت کانال سرور (فقط خواندنی)، toast/بنر مرورگر |
| عملیات | کلید API، نشست (نقش RBAC، tenant، چندمستاجری)، سلامت، metrics، audit |
| مستاجران | slug فعال، ایجاد tenant، پشتههای ذخیرهشده (بارگذاری / ویرایش / حذف)، ترجیحات اعلان |
| ظاهر | زبان UI، مقیاس فونت، تم، ترجمهٔ خودکار CVE |
منابع¶
بخش منابع همهٔ فیدهای داخلی را فهرست میکند: NVD، OSV، GitHub Advisories، GitLab Advisory Database، CISA KEV، The Hacker News، TuxCare، Alpine secdb، Ubuntu USN، Red Hat Security، Debian Security Tracker و Amazon Linux ALAS. هر ردیف آیکون و checkbox دارد؛ فید غیرفعال در اسکن کامل یا watch بعدی نادیده گرفته میشود.
RSS سفارشی زیر فهرست داخلی است. با افزودن فید سفارشی کارت جدید با فعال، نام نمایشی و URL فید (LTR) اضافه میشود. فیدهای ناخواسته را با سطل حذف کنید. شناسهٔ داخلی custom:{uuid} است؛ فقط URL غیرخالی در اسکن شرکت میکند.
انتخاب منابع در cve-radar:source-config ذخیره میشود و در مرحلهٔ ۳ ویزارد راهاندازی تکرار میشود. SubNav هر منبع فعال را با آخرین بهروزرسانی از meta آخرین اسکن نشان میدهد.
شکل ۳الف — منابع: کلیدهای داخلی و RSS سفارشی
اعلانها¶
بخش اعلانها به کانالهای سرور (با راهنمای پیکربندی هر کانال) و هشدار مرورگر تقسیم میشود.
ارسال سمت سرور (Slack، Discord، Microsoft Teams، Telegram، ایمیل SMTP، webhook عمومی) فقط روی میزبان API با متغیر محیطی انجام میشود — secretها وارد مرورگر نمیشوند. پنل GET /api/health?detailed=true را میخواند و هر کانال را پیکربندیشده یا پیکربندینشده نشان میدهد، همراه با حداقل شدت سراسری. با کلیک روی هر ردیف، راهنمای راهاندازی باز میشود: مراحل شمارهدار، نام متغیرهای الزامی/اختیاری و دکمه کپی نمونه برای .env. پس از ویرایش secret سرور، API را restart کنید و Refresh بزنید.
| کانال | متغیرهای الزامی (خلاصه) |
|---|---|
| Slack | NOTIFICATION_SLACK_WEBHOOK_URL (یا legacy ALERT_WEBHOOK_URL) |
| Discord | NOTIFICATION_DISCORD_WEBHOOK_URL |
| Microsoft Teams | NOTIFICATION_TEAMS_WEBHOOK_URL |
| Telegram | NOTIFICATION_TELEGRAM_BOT_TOKEN، NOTIFICATION_TELEGRAM_CHAT_ID |
| ایمیل (SMTP) | NOTIFICATION_SMTP_HOST، NOTIFICATION_SMTP_FROM، NOTIFICATION_SMTP_TO |
| Webhook عمومی | NOTIFICATION_WEBHOOK_URL |
جزئیات production، dedup و سقف severity/نرخ هر کانال: مستندات self-hosted.
هشدار مرورگر فقط سمت کلاینت است: فعالسازی toast / بنر (از زنگ نوار بالا هم) هنگام CVE تازه در watch یا اسکن، toast و بنر یافتههای جدید را نشان میدهد. وضعیت مجوز Notification API (granted، denied، default یا پشتیبانینشده) نمایش داده میشود و در حالت default دکمهٔ درخواست مجوز هست.
شکل ۳ب — اعلانها: فهرست کانالها (تا تنظیم env سرور، پیکربندینشده)
شکل ۳ب۲ — راهنمای بازشدهٔ Slack با نمونه env و دکمهٔ کپی
ظاهر¶
ظاهر تنظیمات نمایشی بدون تأثیر بر منطق اسکن را جمع میکند:
- زبان — انگلیسی، فارسی، عربی، روسی، چینی یا فرانسوی؛ برچسبها، نام منابع SubNav و جهت CVE (RTL برای fa/ar).
- مقیاس فونت — پلههای ۸۵٪ تا ۱۴۰٪ با +/− (
cve-radar:font-scale). - تم — روشن، تاریک یا سیستم (
cve-radar:theme); تم تاریک accent teal روی پسزمینهٔ navy. - ترجمهٔ خودکار CVE — با فعالسازی، سرور در اسکن عنوان و توضیح را به زبان UI غنی میکند.
نوار بالا همچنان زبان و تم را برای دسترسی سریع دارد؛ تغییرات در هر دو محل همگام میمانند.
شکل ۳ج — ظاهر: زبان، مقیاس فونت، تم، ترجمه
عملیات¶
بخش عملیات کلید اختیاری API را در مرورگر ذخیره میکند (X-Api-Key روی /api/v1/*). با GET /api/v1/session حالت چندمستاجری، نقش RBAC، tenant فعال (از X-Tenant-Id) و وضعیت auth API نشان داده میشود. قابلیتهای runtime از /api/capabilities و سلامت سامانه از health تفصیلی (شامل پرچم multi-tenant پایگاه) میآید. Prometheus metrics به /metrics لینک میدهد. رویدادهای audit اخیر ردیفهای بافر محدود به tenant را با زمان، action، mode، تعداد، IP کلاینت، پیشنمایش پشته و sources_failed فهرست میکند.
مستاجران¶
با تنظیم DATABASE_URL، بخش مستاجران slug فعال tenant را (ذخیرهٔ محلی و ارسال بهصورت X-Tenant-Id) عوض میکند، tenant جدید میسازد و پشتههای ذخیرهشده را مدیریت میکند: ذخیرهٔ پشتهٔ فعلی، بارگذاری در ویرایشگر، ویرایش نام و ابزارها درجا، یا حذف. ترجیحات اعلان و overrideهای webhook هر tenant در همین پنل است. درخواست تست اعلان هم X-Tenant-Id میفرستد.
تب تاریخچهٔ اسکن¶
تب تاریخچهٔ اسکن (SubNav) به PostgreSQL روی سرور نیاز دارد. نمودار میلهای روند آسیبپذیری و اسکنهای اخیر را برای tenant فعال (X-Tenant-Id) نشان میدهد. هر ردیف mode اسکن، تعداد شدت، فهرست کامل ابزار پشته و منابع ناموفق را دارد. اگر پایگاه غیرفعال باشد، پیام نیاز به DATABASE_URL نمایش داده میشود.
تب نظارت زنده¶
تب نظارت زنده (نوار SubNav، بین آسیبها و زیرساخت) polling سریع OSV/GitHub را بدون اسکن کامل نشان میدهد. pollها POST /api/v1/watch را با X-Tenant-Id صدا میزنند تا تاریخچهٔ watch زیر tenant فعال ذخیره شود. وقتی watch فعال است، شمارش معکوس تا poll بعدی دیده میشود؛ انتخاب بازه (۲ / ۵ / ۱۵ دقیقه) در settings.watchIntervalMs ذخیره میشود. بخش جدید از آخرین اسکن کامل ردیفهای فشردهٔ CVEهای کشفشده با watch را فهرست میکند؛ نشان روی تب تعداد را نشان میدهد. تاریخچهٔ poll آخرین ۲۰ نتیجه با زمان و تعداد CVE جدید را نگه میدارد. تعویض watch از اینجا یا نوار بالا همگام است؛ اسکن کامل موفق (POST /api/v1/scan/stream) فهرست «جدید از اسکن» را پاک میکند.
شکل ۳د — نظارت زنده: شمارش معکوس، بازه، CVEهای جدید، تاریخچه
اسپلش اسکن¶
با شروع اسکن کامل، لایهٔ تمامصفحه باز میشود. با رسیدن رویدادهای SSE، هر منبع داده یک ردیف با نقطهٔ پالس (فعال)، نقطهٔ سبز (تمام) و ابزار پشتهٔ جاری دارد؛ نوار درصد از ScanProgressEvent.percent پیروی میکند. پیش از اولین رویداد، برچسبهای مرحلهای ثابت (NVD → OSV → …) نمایش داده میشوند. پس از اتمام، به داشبورد برمیگردید.
شکل ۴ — نمای اسپلش حین اسکن کامل
ویزارد راهاندازی اولیه¶
پس از سلب مسئولیت، کاربران تازه ویزارد تمامصفحهٔ چهار مرحلهای میبینند:
- پشته — افزودن ابزار یا اعمال پیشتنظیم زیرساخت.
- تنظیمات — هشدار، نظارت زنده، بازه، ترجمهٔ اختیاری.
- منابع — فعال/غیرفعال کردن فیدهای داخلی و RSS سفارشی.
- پایان — اسکن کامل اولیهٔ اختیاری؛
cve-radar:setup-completeرا تنظیم میکند.
شکل ۵ — ویزارد راهاندازی اولیه، مرحلهٔ پشته (فارسی، تم روشن)
کاربران بازگشتی وقتی setupComplete از قبل تنظیم شده باشد ویزارد را رد میکنند.
نتایج اسکن کششده¶
وقتی اپ اسکن قبلی را از localStorage (همان کلید پشته) بارگذاری میکند، داشبورد بنر نتایج کششده با تاریخ اسکن ذخیرهشده نشان میدهد. برای بهروزرسانی دادهٔ زنده از API، اسکن کامل را از نوار بالا اجرا کنید.
ناوبری مبتنی بر ابزار¶
کلیک روی کارت ابزار در داشبورد (یا نام ابزار در SubNav) به تب آسیبها میرود، فیلتر ابزار را تنظیم میکند، سایر فیلترها را پاک میکند و فهرست کامل منطبق را بدون صفحهبندی نشان میدهد.
مقیاس فونت و تم¶
جزئیات در بخش ظاهر تب زیرساخت: مقیاس فونت (۸۵٪ تا ۱۴۰٪)، تم (روشن / تاریک / سیستم) و ترجمهٔ خودکار CVE. تم تاریک accent teal (#20c5ba) روی پسزمینهٔ navy دارد.
موبایل¶
زیر breakpoint md سایدبار پنهان است؛ از منوی هدر SubNav کامل را باز کنید.
بعدی: اسکن و نظارت
فیلترهای پیشرفته (#263): نوار چسبان، چندانتخاب شدت/منبع، EPSS و بازه تاریخ، همگامسازی URL، نماهای ذخیرهشده.