GeckoFlag برنامج يعمل على خادمك الخاص. ولكي تطمئن إلى إيداع معلومات مشاريعك فيه، يُجري المطوّر بنفسه فحصًا أمنيًا مع كل إصدار، وينشر تفاصيله ونتائجه في هذه الصفحة.
هذه الصفحة سجلّ لفحص ذاتي يجريه المطوّر. وهي ليست شهادة أو تدقيقًا من جهة خارجية. كما ننشر معها ما الذي نفحصه تحديدًا، لذا يمكنك الاستعانة بها عند اتخاذ قرار اعتماد البرنامج.
- إجراءات الحماية في التصميم
- الفحص مع كل إصدار
- نتائج فحص أحدث إصدار
- ما لا يشمله الفحص
- الإبلاغ عن الثغرات الأمنية
- التحقق من الملفات الموزّعة
- الإعدادات الموصى بها
إجراءات الحماية الأمنية في التصميم
يتضمن GeckoFlag الإجراءات التالية بشكل افتراضي، وجميعها مفعّلة دون الحاجة إلى أي إعداد.
حماية كلمات المرور
لا تُخزَّن كلمات المرور كنص صريح، بل تُحفظ بعد تجزئتها (hash) باستخدام bcrypt. كما تُحفظ رموز إعادة تعيين كلمة المرور مجزّأةً أيضًا، ويُقيَّد عدد طلبات إعادة التعيين.
تقييد محاولات تسجيل الدخول
تُحتسب محاولات تسجيل الدخول الفاشلة على مستوى الحساب وعلى مستوى عنوان IP المصدر معًا، وعند تجاوز عدد معيّن يُقيَّد تسجيل الدخول مؤقتًا. ويحدّ ذلك من هجمات القوة الغاشمة والهجمات التي تستهدف عددًا كبيرًا من الحسابات.
الحماية من CSRF
يُتحقَّق من رمز مميّز (token) عند إرسال أي نموذج، لمنع العمليات المنتحَلة القادمة من مواقع خارجية.
الحماية من XSS
تُحفظ النصوص المنسقة في التذاكر والتعليقات والويكي والملاحظات وغيرها وتُعرض بعد تنقيتها باستخدام HTML Purifier بحيث لا يبقى منها إلا الوسوم المسموح بها. ولا يُسمح إلا بروابط http وhttps. كما تمر جميع النصوص التي يولّدها الذكاء الاصطناعي بالمعالجة نفسها قبل حفظها.
الحماية من حقن SQL
تعتمد عمليات قاعدة البيانات على ORM الخاص بـ CakePHP 5 وعلى الاستعلامات المُعدّة مسبقًا (prepared statements).
التحقق من ترويسة Host
تُنشأ الروابط المضمّنة في رسائل البريد الإلكتروني الخاصة بإعادة تعيين كلمة المرور والدعوات والإشعارات استنادًا إلى النطاق المسجَّل، لا إلى ترويسة Host في الطلب. لذلك لا يمكن استخدام ترويسة Host مزيّفة لاستبدال الروابط الواردة في الرسائل بعناوين خارجية.
تخزين الملفات
تُخزَّن صور التذاكر وملفات المشاريع خارج المجلد العام، ولا تُقدَّم إلا بعد التحقق من أن الشخص الذي يطلبها عضو في المشروع. ولا تُقبل الملفات ذات الامتدادات القابلة للتنفيذ مثل PHP.
تشفير مفتاح API
يُشفَّر مفتاح Claude API المستخدم في ميزات الذكاء الاصطناعي قبل حفظه في قاعدة البيانات.
رموز API لتكامل Claude
يكون تكامل Claude معطَّلًا افتراضيًا، ولا يمكن استخدامه إلا إذا فعّله المسؤول وسمح به لكل مستخدم. لا يُحفَظ من كل رمز API إلا قيمته المجزّأة (hash)، ويمكن تحديد تاريخ انتهاء صلاحية له. وعند تغيير كلمة المرور تصبح الرموز غير صالحة. وتتحقق واجهة API من الصلاحيات نفسها التي تتحقق منها الشاشات، ولا يمكن لرمز القراءة فقط تغيير أي شيء.
تقييد عناوين IP
يمكن للمسؤول حصر الوصول في عناوين IP محددة.
إغلاق المُثبِّت
بعد اكتمال الإعداد، يتعذّر الوصول إلى شاشة المُثبِّت.
حماية المجلدات غير العامة
يُرفض افتراضيًا في Apache الوصول المباشر إلى مجلدات الإعدادات والسجلات والشيفرة المصدرية وغيرها (بالنسبة إلى Nginx، راجع الإعدادات الموصى بها).
نسخ احتياطي تلقائي قبل التحديث
تُنشأ نسخة احتياطية تلقائيًا قبل كل تحديث للبرنامج.
التحقق من توقيع ملفات التحديث
تحمل ملفات التحديث الرسمية توقيعًا إلكترونيًا (Ed25519) من المطوّر. وقبل التحديث يُطابَق التوقيع مع محتوى جميع الملفات، ولا تُطبَّق الملفات التي جرى العبث بها ولا ملفات التحديث غير الرسمية.
التحقق من الصور المرفوعة
يُحدَّد تنسيق الصور، مثل صور الملف الشخصي والصور المصغّرة والشعارات، من محتوى الملف نفسه، وتُحفظ بأسماء ملفات عشوائية. ولا يُقدَّم من مجلدات حفظ الصور أي ملف غير الصور (في Apache). ولا تُقبل ملفات SVG.
ترويسات الأمان
تُرسَل الترويسات Content-Security-Policy وX-Frame-Options وX-Content-Type-Options وReferrer-Policy وPermissions-Policy لمنع هجمات الاختطاف بالنقر (clickjacking) وتسرّب المعلومات إلى المواقع الخارجية. وعند التشغيل عبر HTTPS تُرسَل أيضًا ترويسة Strict-Transport-Security لكي يتصل المتصفح دائمًا عبر HTTPS.
إدارة الجلسات
تُنشأ الجلسة من جديد عند كل تسجيل دخول. وتنعكس تغييرات الصلاحيات وحذف الحسابات وتغيير كلمات المرور فورًا حتى على الشاشات المسجَّل الدخول فيها حاليًا. ويتطلب تغيير البريد الإلكتروني وكلمة المرور إدخال كلمة المرور الحالية.
الفحص الأمني مع كل إصدار
قبل نشر أي إصدار جديد، نُجري الفحوصات التالية. تُجرى الفحوصات في بيئة اختبار بالتكوين نفسه المستخدم في بيئة الإنتاج، ولا تُجرى على الخدمات المتاحة للعموم ولا على خوادم العملاء. الفحوصات التي أُجريت على أحدث إصدار موضّحة في «نتائج فحص أحدث إصدار».
| الفئة | محتوى الفحص | الأدوات والمعايير المستخدمة | التكرار |
|---|---|---|---|
| المكتبات التابعة | التحقق من خلوّ المكتبات المستخدمة من الثغرات المعروفة، وإنشاء قائمة بالمكتبات المستخدمة (SBOM) | composer audit، OSV-Scanner، CycloneDX | مع كل إصدار |
| التحليل الثابت | الكشف من خلال الشيفرة المصدرية عن المسارات التي تصل فيها قيم الإدخال إلى عمليات خطرة (مثل XSS وحقن SQL) | Psalm (تحليل taint)، PHPStan (المستوى 5)، Semgrep | مع كل إصدار |
| تسرّب المعلومات السرية | التحقق من عدم وجود كلمات مرور أو مفاتيح API في الشيفرة المصدرية أو في الملفات الموزّعة | gitleaks | مع كل إصدار |
| الفحص الديناميكي | إرسال طلبات هجومية فعلية بعد تسجيل الدخول بحساب مسؤول وبحساب مستخدم عادي، ومراقبة الاستجابة | Nuclei | مع كل إصدار |
| فحص الصلاحيات | التحقق من تعذّر عرض التذاكر والملفات والملاحظات في المشاريع غير المنضمّ إليها أو التعامل معها عبر تغيير المعرّف (ID) في عنوان URL | اختبارات آلية (PHPUnit)، تحقق يدوي | مع كل إصدار |
| رفع الملفات | التحقق من رفض الملفات القابلة للتنفيذ، والملفات المتنكّرة في هيئة صور، وملفات ZIP التي تتلاعب بالمسارات وما شابهها | مراجعة الشيفرة، تحقق يدوي | مع كل إصدار |
| XSS | إدخال سلاسل هجومية في نص التذكرة والتعليقات والويكي والنصوص التي يولّدها الذكاء الاصطناعي، والتحقق من عدم تنفيذ أي نص برمجي | مراجعة الشيفرة، تحقق يدوي | مع كل إصدار |
| التحقق حسب تكوين الخادم | التحقق من تعذّر الوصول المباشر إلى ملفات الإعدادات والسجلات في Apache وNginx، ولكل طريقة من طرق وضع المجلد العام | تحقق يدوي | مع كل إصدار |
| إضافة تكامل Claude | الثغرات المعروفة في المكتبات التي تستخدمها الإضافة، وطريقة التعامل مع رمز API، وتقييد وجهات الطلبات | npm audit، gitleaks، مراجعة الشيفرة | مع كل إصدار للإضافة |
| الفحص الذاتي بقائمة تحقق | مراجعة المصادقة والجلسات والتحقق من المدخلات ومعالجة الأخطاء وغيرها بندًا بندًا | بالاستناد إلى OWASP ASVS 5.0 المستوى 1، ودليل IPA (اليابان): كيفية تأمين موقعك الإلكتروني | مع كل إصدار رئيسي |
| الموقع الرسمي | إعدادات HTTPS وترويسات الأمان في geckoflag.com | SSL Labs، Mozilla Observatory | مرة واحدة شهريًا |
إذا اكتُشفت مشكلة بدرجة خطورة «عالية» أو «متوسطة»، فلن يُطرح الإصدار حتى تُصلَح ويُعاد الفحص. أما المشكلات ذات الخطورة «المنخفضة» فتُراجَع، ثم تُصلَح أو يُوثَّق سبب عدم تأثيرها.
سياسة تحديث المكتبات التابعة
نتحقق من الثغرات المعروفة في المكتبات التي يستخدمها GeckoFlag (مثل CakePHP) مع كل إصدار. وإذا وُجدت ثغرة تؤثر في GeckoFlag، ننشر إصدارًا مصحَّحًا ضمن المدد الاسترشادية التالية.
- درجة الخطورة «حرجة» و«عالية»: خلال 14 يومًا من الإعلان عنها
- درجة الخطورة «متوسطة»: خلال 30 يومًا من الإعلان عنها
- درجة الخطورة «منخفضة»: في الإصدار التالي (خلال 90 يومًا على الأكثر)
حتى الثغرات التي لا تؤثر في GeckoFlag بالنظر إلى طريقة استخدامه للمكتبة، نحدّث المكتبة المعنية إلى إصدار مصحَّح في الإصدار التالي. ولا تُضمَّن مكتبات التطوير في الملفات الموزّعة.
نتائج فحص أحدث إصدار: v1.11.0
شمل هذا الفحص التغييرات منذ v1.10.0 (تكامل Claude، وألوان النص والخلفية والفواصل في النص المنسَّق، وغيرها)، كما أُصلحت مشكلات كانت موجودة في الإصدارات السابقة. إذا كنت تستخدم v1.10.0 أو إصدارًا أقدم، فنوصي بالتحديث إلى v1.11.0.
| الفحص | الأدوات المستخدمة (الإصدار) | ما اكتُشف (عالية / متوسطة / منخفضة) | الإجراء المتخذ |
|---|---|---|---|
| المكتبات التابعة | GitHub Advisory Database، FriendsOfPHP security-advisories (بيانات بتاريخ 2026-10-28؛ 89 حزمة) | 0 / 0 / 0 | لا توجد ثغرات معروفة في المكتبات المضمَّنة في ملفات التوزيع. وقد عولجت الثغرات المعروفة في مكتبات التطوير فقط بتحديثها في v1.11.0 (لا تُضمَّن مكتبات التطوير في ملفات التوزيع) |
| التحليل الثابت ومراجعة الشيفرة | Psalm 5.26.1 (تحليل taint)، وPHPStan 2.1.17 (المستوى 5)، وSemgrep 1.182.1، ومراجعة يدوية للشيفرة (التغييرات منذ v1.10.0: واجهة API ورموز تكامل Claude، والنص المنسَّق، والبقاء مسجَّل الدخول، وتحديثات البرنامج؛ إضافةً إلى مخرجات الروابط في جميع الشاشات) | 1 / 1 / 3 | أُصلحت المشكلات «العالية» و«المتوسطة» ومشكلتان «منخفضتان» في v1.11.0. أما المشكلة «المنخفضة» المتبقية فلا تحدث إلا بإجراءات المستخدم نفسه، وتأكَّد أن تأثيرها محدود. وكانت المشكلة «العالية» موجودة في الإصدارات السابقة |
| تسرّب المعلومات السرية | gitleaks 8.24.2 | 0 / 0 / 0 | فُحصت الشيفرة المصدرية وملفات التوزيع كلاهما. وكانت الحالتان المكتشفتان إنذارين كاذبين (مثل سلاسل نصية نموذجية داخل مكتبات خارجية) |
| التحقق من الإصلاحات | التحقق من السلوك في بيئة الاختبار (PHP 8.3، MariaDB 10.11، Apache 2.4، Nginx 1.24، Chromium) | — | التأكد لكل ملاحظة من أن المشكلة التي كانت قائمة قبل الإصلاح لم تعد تتكرر |
| الفحص الديناميكي | Nuclei v3.11.1 (القوالب v10.5.1)، أُجري دون تسجيل الدخول وبصفة المسؤول والعضو | 0 / 0 / 0 | لا توجد مشكلات |
| فحص الصلاحيات | PHPUnit 12.5 (454 اختبارًا آليًا؛ إضافةً إلى الفحوص السابقة، التأكد من أن واجهة API لتكامل Claude ترفض الطلبات من دون رمز، أو برمز للقراءة فقط، أو من مستخدمين غير مسموح لهم، أو عند إيقاف الميزة، وأنها لا تصل أبدًا إلى مشاريع لم ينضم إليها المستخدم) | 0 / 0 / 0 | لا توجد مشكلات |
| التحقق حسب تكوين الخادم | يدوي (طريقتان لوضع المجلد العام في Apache 2.4 وNginx 1.24؛ 39 عنوان URL تشمل ملفات الإعدادات والسجلات والجلسات والملفات المحفوظة وغيرها) | 0 / 0 / 1 | أُصلح في v1.11.0: يُرفض الآن الوصول المباشر إلى مجلد ملفات الإصدارات القديمة (files) بالكامل في Apache أيضًا. لا مشكلات أخرى |
| قائمة التحقق | OWASP ASVS 5.0 المستوى 1 (70 بندًا) | استيفاء 50 بندًا من أصل 56 بندًا منطبقًا | لم تُراجَع هذه المرة (تبقى نتيجة v1.10.0 سارية) |
| إضافة تكامل Claude | npm audit، وgitleaks 8.24.2، وmcpb validate، ومراجعة يدوية للشيفرة (geckoflag-1.0.0.mcpb) | 0 / 0 / 0 | لا توجد ثغرات معروفة تؤثر في المكتبات المضمَّنة في ملف التوزيع. وتم التحقق من طريقة التعامل مع رمز API ومن تقييد وجهات الطلبات (HTTPS فقط، ودون تتبّع عمليات إعادة التوجيه) |
تُحفظ نتائج الفحص لجميع الإصدارات، بما فيها الإصدارات السابقة، في صفحة «النتائج السابقة».
ما لا يشمله الفحص
للفحوصات المذكورة أعلاه الحدود التالية. يُرجى أخذها في الاعتبار أيضًا عند التفكير في اعتماد البرنامج.
- لم يخضع البرنامج لفحص من جهة خارجية. لم تُجرَ حتى الآن مراجعة للشيفرة المصدرية أو اختبار اختراق من قِبل خبراء خارجيين.
- بيئة الخادم الخاصة بك خارج نطاق الفحص. يتفاوت مستوى الأمان كثيرًا بحسب إعدادات نظام التشغيل وخادم الويب وPHP وقاعدة البيانات ومدى تحديثها.
- لم نتحقق من جميع بيئات الاستضافة. تقتصر التكوينات التي فُحصت على تلك المذكورة في «نتائج فحص أحدث إصدار».
- الخدمات الخارجية خارج النطاق. يعتمد أمان واجهة API الخاصة بشركة Anthropic المستخدمة في ميزات الذكاء الاصطناعي، وتطبيق Claude لسطح المكتب المستخدم في تكامل Claude، وخوادم إرسال البريد وغيرها، على الجهات المزوّدة لكل منها.
- بشأن ما لا تكتشفه الأدوات الآلية. نسدّ النقص في أنواع المشكلات التي لا تكتشفها الأدوات (مثل الخلل في منطق العمل) بالفحص اليدوي، لكن لا يمكن تغطية كل شيء.
الإبلاغ عن ثغرة أمنية اكتشفتها
إذا اكتشفت مشكلة تعتقد أنها ثغرة أمنية في GeckoFlag، فيُرجى التواصل معنا مباشرة عبر القناة أدناه بدلًا من نشرها علنًا. يطّلع المطوّر بنفسه على كل بلاغ.
قناة الإبلاغ: تواصل معنا عبر نموذج الاتصال مع اختيار «الإبلاغ عن ثغرة أمنية» في نوع الاستفسار
المعلومات المطلوبة في البلاغ
- الإصدار المتأثر، والشاشة أو الميزة التي تظهر فيها المشكلة
- خطوات إعادة إنتاج المشكلة (قدر الإمكان)
- التأثير المتوقع
- بيئة الخادم التي تستخدمها (PHP، وخادم الويب، وغيرهما)
طلب
- يُرجى إجراء التحقق في بيئة تديرها بنفسك، وعدم القيام بأي عمليات هجومية على نسخ GeckoFlag التي يشغّلها آخرون أو على geckoflag.com.
إذا رغبت في ذلك، فسنذكر اسمك شكرًا وتقديرًا في المعلومات الأمنية الخاصة بالإصدار المصحَّح.
قيم SHA-256 للملفات الموزّعة
يمكنك التأكد من أن الملف الذي نزّلته مطابق للملف الرسمي بمقارنته بالقيم التالية.
| الملف | SHA-256 |
|---|---|
| GeckoFlag - 1.11.0.zip | 33354ac588c4cb4de2953c3c26a484953c2bb886f38196ba4bcf4fe629648399 |
| geckoflag-1.0.0.mcpb | 44f2c6dfc9f437856d0680920a327820d757a14116064faa6e46ad8a961d0747 |
طريقة التحقق: في Windows، شغّل Get-FileHash filename -Algorithm SHA256 في PowerShell، وفي macOS وLinux شغّل shasum -a 256 filename (مع استبدال filename باسم الملف).
الإعدادات الموصى بها للاستخدام الآمن
يعتمد أمان GeckoFlag أيضًا على إعدادات الخادم الذي يُثبَّت عليه. نوصي بالإعدادات التالية.
- أكمل التثبيت فور رفع الملفات: إلى أن يكتمل التثبيت، يستطيع أي شخص يعرف عنوان URL فتح شاشة الإعداد. لذا أكمل التثبيت فور وضع الملفات على الخادم.
- شغّل البرنامج عبر HTTPS: تُشفَّر بيانات تسجيل الدخول ومحتوى المشاريع أثناء نقلها. وتتيح كثير من خدمات الاستضافة شهادات SSL مجانية. لاحظ أنه بمجرد فتح الموقع عبر HTTPS مرة واحدة، سيتصل المتصفح بذلك العنوان عبر HTTPS طوال السنة التالية (v1.10.0 فما بعد). انتبه لذلك إذا كنت تخطط للتوقف عن استخدام HTTPS.
- اجعل المجلد العام (جذر المستندات) هو webroot: بذلك تصبح ملفات الإعدادات والسجلات في موضع لا يمكن الوصول إليه من الويب.
- إذا كنت تستخدم Nginx، فأضف الإعدادات اللازمة: لا يعمل ملف .htaccess في Nginx. لذا اضبط الإعدادات بشكل منفصل لرفض الوصول إلى المجلدات غير العامة، ولمنع تنفيذ PHP في مجلد رفع الصور (webroot/img). وللاطلاع على مثال للإعدادات، راجع الدليل (التثبيت).
- حدّث إلى أحدث إصدار: تُقدَّم الإصلاحات الأمنية ضمن أحدث إصدار. احصل على ملفات التحديث من الموقع الرسمي وتحقق من قيمة SHA-256. وبدءًا من v1.10.0، يُتحقَّق من التوقيع أيضًا تلقائيًا قبل التحديث.
- استخدم إصدارات مدعومة من PHP وقاعدة البيانات: لا تُقدَّم إصلاحات لإصدارات PHP التي انتهى دعمها.
- احمِ حسابات المسؤول: استخدم كلمات مرور طويلة يصعب تخمينها، وامنح صلاحيات المسؤول لمن يحتاجون إليها فقط.
- استخدم تقييد IP عند الاستخدام داخل المؤسسة: يمكنك من «الإعدادات» حصر عناوين IP المسموح لها بالوصول.
- أنشئ نسخًا احتياطية بانتظام: احفظ قاعدة البيانات والملفات المرفوعة في مكان منفصل عن الخادم.