الأمان
كيف يخزّن Getman الأسرار، وما يرسله عبر الشبكة، وكيف تُعزل السكربتات والاستجابات، والإعدادات الافتراضية المعروفة.
Getman يعمل محليًا أولًا. لا يوجد حساب، ولا خدمة سحابية، ولا قياس عن بُعد. لا يغادر جهازك شيء إلا الطلبات التي ترسلها. تصف هذه الصفحة كيف يحمي التطبيق الأسرار وماذا يفعل بالبيانات التي يتعامل معها. وهي ليست تدقيقًا أمنيًا مستقلًا.
الأسرار
| المكان الذي قد يظهر فيه السر | طريقة الحماية |
|---|---|
| متغيرات السر، على مستوى عام أو المشروع أو المجموعة أو البيئة | تُشفَّر القيمة بالخوارزمية AES-256-GCM في قاعدة البيانات المحلية. يستخدم كل حفظ قيمة عشوائية جديدة (nonce). تحمل مستندات JSON قيمة فارغة. |
| مفتاح التشفير | يُخزَّن مفتاح 256 بت في سلسلة المفاتيح لنظام التشغيل (macOS Keychain أو Windows Credential Manager)، تحت اسم الخدمة dev.getman.app. إذا لم تتوفر سلسلة المفاتيح، يُحفظ المفتاح في ملف master.key داخل مجلد بيانات التطبيق، بصلاحيات للمالك وحده. عندها يعرض شريط الحالة Key file بدلًا من Keychain. |
| الرموز من OAuth 2.0 أو من تدفق الرموز | تُحفظ كمتغيرات بيئة سرية، لذلك تُشفَّر بالطريقة نفسها. |
| السجل | تُنقّح لقطات الطلبات والعناوين والترويسات ونصوص الأخطاء قبل تخزينها. تُزال قيم الأسرار، وترويسات Authorization وCookie، وترويسات مفاتيح API، والمعاملات التي تحمل token أو key أو secret أو password أو signature. |
| عمليات التصدير: نسخ مساحة العمل الاحتياطية، وملفات Postman، ومجلد مزامنة Git | تكون قيم الأسرار وأسرار المصادقة الحرفية فارغة. وتُوسم عمليات التصدير بأنها مُنقّحة. |
| سجلات السكربتات وأخطاء الاختبارات | تُنقّح بالقائمة نفسها قبل عرضها أو تخزينها. |
| مستورد المستودع | تُقرأ ملفات .env لأسماء المفاتيح فقط. لا تصل القيم إلى المحلل أبدًا. |
المشاريع معزولة عن بعضها. تُحمَّل المتغيرات والأسرار والكوكيز والسجل لكل مشروع على حدة. ولا يمكن لتبديل المشروع أن يعيد استخدام بيانات اعتماد مشروع آخر.
سطر الأوامر والوكلاء
لا يقرأ أداة سطر الأوامر المثبتة، ولا خادم MCP، مفتاح سلسلة المفاتيح إلا بعد أن تسمح بذلك من Project settings → Command line & agents. يُخزَّن هذا الإذن في سلسلة المفاتيح نفسها، فلا يستطيع برنامج آخر تفعيله بصمت. وطالما أنه مغلق، يخرج CLI بالرمز 5. في وضع مساحة العمل، تأتي الأسرار من متغيرات البيئة GETMAN_VAR_<KEY>، ولا تُقرأ أبدًا من مجلد المزامنة.
الشبكة
- التحقق من شهادة TLS مفعّل افتراضيًا. يمكنك إيقافه لطلب واحد من تبويبة Settings الخاصة بالطلب، فيعرض التطبيق تحذيرًا. لا يوجد مفتاح عام لذلك. والخيار الأكثر أمانًا هو شهادة CA مخصصة للمشروع.
- تُتبع عمليات إعادة التوجيه واحدة تلو الأخرى. عندما تتجه إعادة التوجيه إلى أصل آخر (مخطط أو مضيف أو منفذ مختلف)، تُحذف ترويسات Authorization وProxy-Authorization وCookie، وكذلك الترويسات التي تحمل مفاتيح API أو الرموز أو الأسرار أو التوقيعات. ولا تُرسل أجسام الطلبات في إعادة التوجيه 307 و308 إلى الأصل الجديد.
- تُخزَّن الكوكيز لكل مشروع في قاعدة البيانات المحلية.
- ترفض اتصالات WebSocket القيمة
verifyTls: falseلعناوينwss://. - أمان الإنتاج: الطلبات التي تعدّل البيانات (أي شيء غير GET وHEAD وOPTIONS) إلى البيئات الموجودة في قائمة التأكيد للمشروع تحتاج إلى تأكيد صريح، سواء في المحرر أو في المشغّل. القائمة الافتراضية هي production.
السكربتات
تعمل سكربتات ما قبل الطلب وما بعد الاستجابة داخل QuickJS، المُترجَم إلى WebAssembly. للسكربت حد للذاكرة 32 ميغابايت، وحد زمني 5 ثوان. ليس له وصول إلى نظام الملفات أو الشبكة أو المؤقتات أو الصفحة. يرى فقط متغيرات المشروع الحالي والطلب والاستجابة الحاليين. الواجهات غير المدعومة، مثل gm.sendRequest، ترمي خطأً.
عرض الاستجابات
نصوص الاستجابات القادمة من الخوادم غير موثوقة. تستخدم معاينات HTML إطارًا معزولًا (sandboxed iframe) بلا سكربتات، ولا وصول إلى الأصل نفسه، ولا تنقّل. تُعرض JSON وXML والنص كنص عادي في المحرر. وتُعرض الصور من عنوان data URL.
سطح تطبيق سطح المكتب
يمنح التطبيق نافذته صلاحيات core وdialog وclipboard وopener وwindow-state فقط، إضافة إلى أمر داخلي واحد. تُقرأ الملفات فقط من المسارات التي تختارها في نافذة الحوار. يفحص مستورد المستودع بصلاحية قراءة فقط، ويتخطى المجلدات node_modules و.git ومجلدات البناء، ويحدّ من حجم الملفات ونوعها.
الإعدادات الافتراضية المعروفة
- لم تُضبط بعد سياسة أمان المحتوى (Content Security Policy) في Tauri. تستخدم القيمة الافتراضية للقالب، وهي
null. - لا يحمّل التطبيق أي كود بعيد. السكربتات والخطوط ومكتبات WebAssembly مضمّنة، ولا يعمل HTML للاستجابات إلا داخل المعزل الخالي من السكربتات. يُنصح بسياسة أكثر صرامة، لكنها لم تُتحقق منها في التطبيق المحزوم.
- توقيع الشيفرة غير مُعدّ بعد. بناءات macOS غير موقّعة، لذلك يحتاج التشغيل الأول إلى Open من القائمة السياقية.