امنسازی برنامههای Electron: راهنمای عملی
مدیریت امن اطلاعات محرمانه و IPC در برنامههای دسکتاپ جدید.
چرا Electron به دقت نیاز دارد؟
برنامه Electron مرورگر و محیط اجرای Node.js را یکجا گرد میآورد. اگر رندرری که محتوای دوردست یا تحت نفوذ مهاجم را بارگذاری میکند به Node دسترسی داشته باشد، یک XSS به اجرای کد از راه دور روی دستگاه کاربر تبدیل میشود. امنسازی Electron عمدتاً به جداسازی این دو محیط وابسته است. GitSwitch، کلاینت Git با Electron و React 19 که توکنهای GitHub و کلید API Gemini را نگه میدارد، باید این مرز را درست پیاده کند.
قرارداد جداسازی
| تنظیم | مقدار | دلیل |
|---|---|---|
contextIsolation | روشن | preload و صفحه در زمینههای جداگانه JS اجرا میشوند تا صفحه نتواند متغیرهای سراسری دارای اختیار را دستکاری کند |
sandbox | روشن | رندرر دسترسی مستقیم به Node.js، require، fs یا child_process ندارد |
nodeIntegration | خاموش | صفحه هرگز به امکانات داخلی Node دسترسی ندارد |
| API ارائهشده | فهرست مجاز contextBridge | preload چند تابع مشخص را ارائه میکند، نه ipcRenderer خام را |
IPC بهعنوان مرز اعتماد
هر اقدام دارای اختیار از ipcMain.handle / ipcRenderer.invoke روی فهرست صریح کانالهای مجاز عبور میکند. فرایند اصلی هر پیام را ورودی غیرقابل اعتماد میداند: کانالها اعتبارسنجی و آرگومانها پاکسازی میشوند؛ فراخوانیهای طولانی مهلت زمانی دارند تا عملیات معطل Git برنامه را قفل نکند. رابط اجرای دستور دلخواه وجود ندارد؛ هر کانال وظیفه محدودی انجام میدهد.
مدیریت اطلاعات محرمانه
توکنها وارد localStorage نمیشوند و در رندرر باقی نمیمانند:
- هنگام ذخیره، توکن دسترسی شخصی GitHub و کلید Gemini در مخزن کلید سیستمعامل قرار دارند: Keychain در macOS، Credential Manager در Windows و libsecret در Linux؛ نه در فایل تنظیمات متنی.
- هنگام استفاده، کلیدها از گزارش حذف و پس از استفاده از حافظه پاک میشوند تا گزارش خرابی یا گزارش اشتراکی آنها را افشا نکند.
- هنگام انتقال، API Gemini تنها مسیر خروجی شبکه است و diff ارسالی برای تولید پیام commit به تغییراتی محدود میشود که کاربر ثبت میکند.
نتیجه
پیشفرضهای آسانکننده Electron مانند Node در رندرر، ماژول قدیمی remote و IPC گسترده، خطر هم ایجاد میکنند. GitSwitch جداسازی و sandbox را فعال میکند، رابطی کوچک و ممیزیشده دارد و اطلاعات محرمانه را در مخزن کلید سیستمعامل نگه میدارد. نتیجه، برنامه دسکتاپی با رابط وب است که نمیتوان آن را به اجرای کدی واداشت که برای اجرای آن ساخته نشده است.