🧪 حوّل كل ملاحظة مكتشفة إلى دليل قابل للتشغيل، للدفاع فقط، من أجل الإفصاح المسؤول.
لكل ملاحظة في خريطة detect، يكتب نشرة أمنية مكتفية بذاتها واختبارًا يتحقق من المسار الآمن، فيفشل الاختبار ما دامت المشكلة قائمة وينجح بعد إصلاح الكود.
تبقى اختبارات Lagune معزولة تحت .lagune/، بعيدًا عن مجموعة اختباراتك.
طريقة الاستخدام
- كل الملاحظات
- ملاحظة محددة بالاسم
/lagune-prove
اطّلع على أسماء الملاحظات المتتبَّعة بالفعل:
npx lagune read list --findings
# Findings
# ...
# • SQL injection في البحث عن المستخدم
# ...
# ثم أثبت إحداها
/lagune-prove SQL injection في البحث عن المستخدم
آلية العمل
يقرأ الكود المصدري الذي تشير إليه كل ملاحظة، ويكتب مجلدًا لكل ملاحظة مُثبتة تحت .lagune/proofs/، يحتوي على ملفين بالضبط:
| الملف | ما هو |
|---|---|
report.test.mjs (أو .cjs) | الاختبار. يعمل على Poku إن كان مشروعك يستخدمه بالفعل، وإلا فعلى مشغّل الاختبارات الأصلي في Node.js، فلا يحتاج إلى تثبيت أي شيء. |
report.md | نشرة أمنية مكتفية بذاتها: الخطورة، والأثر، وطريقة إعادة إنتاج المشكلة، وأمر التشغيل، ويمكن قراءتها وحدها. |
الإثباتات مكتوبة دائمًا بلغة JavaScript، فتبقى قابلة للنقل أيًا كانت لغة مشروعك. ويربط فهرس README.md كل الإثباتات ويوفّر أمرًا واحدًا لتشغيلها كلها.
- إنه اختياري ومستقل: ليس من المراحل الخمس، ولا جزءًا من سلسلة التتبع.
- لا يكتب إلا داخل
.lagune/proofs/ولا يمسّ أبدًا مُخرَجات المراحل أو الكود، الذي يقرؤه فقط. - الملاحظة التي لا يعيد اختبارها إنتاج المشكلة لا تحصل على إثبات، ويخبرك بأن تشغّل
/lagune-detectعلى ذلك الموضع لمواءمته مع الواقع الحالي. - تشغيله مجددًا يوائم الإثباتات مع الواقع الحالي: يُحذف مجلد الملاحظة التي زالت أو لم تعد تُعاد إنتاجها.
لا يعمل إلا عندما تستدعيه: لا يبدؤه الوكيل من تلقاء نفسه أبدًا.
يقرأ prove خريطة detect الناتجة عن /lagune-detect، لذلك شغّل detect أولًا.
للدفاع فقط، وبتصريح
قبل توليد أي شيء، يتأكد من أنك مصرّح لك باختبار الهدف، ويرفض أي طلب لأداة استغلال عاملة أو payload هجومي أو تهرّب من الاكتشاف. يُظهر الإثبات السلوك الآمن، ولا يُخرج أبدًا مدخلًا هجوميًا.
من الإثبات إلى الإفصاح
ملفا كل ملاحظة مُثبتة مكانهما معًا في GitHub Gist خاص للإبلاغ عن الثغرة. فهما دليل على مشكلة قائمة لم يُفصح عنها، لذلك يُبقيهما ملف .gitignore داخل .lagune/proofs/ خارج كل commit: شاركهما عبر ذلك الـ Gist فقط حتى يحلّ المشرفون المشكلة.
ويبقى إغلاق الملاحظة في سلسلة Lagune مهمة /lagune-harden و /lagune-verify: ينتج prove الأدلة، ولا يُغلق شيئًا.
الأسئلة الشائعة
لا. يكتب /lagune-prove أدلة للدفاع فقط: اختبارًا يتحقق من المسار الآمن، فيفشل ما دامت المشكلة قائمة وينجح بعد إصلاح الكود، إضافة إلى نشرة أمنية من أجل الإفصاح المسؤول.
ملفين لكل ملاحظة: اختبارًا (report.test.mjs أو .cjs) ونشرة أمنية (report.md).
يكتب prove نشرة أمنية مكتفية بذاتها يمكنك مشاركتها عبر قناة خاصة مثل GitHub Gist خاص، وفق مبادئ الإفصاح المسؤول.
