مقال
مشاريع

العقد الموقّع يُقفل، وتعديله يعيده مسودة

11 أغسطس 2026Majed Alandajani

حين بنيت توقيع العقود كان السؤال الذي يشغلني واضحا: كيف أمنع التزوير؟ والجواب معروف: توقيع تشفيري على محتوى العقد بمفتاح لا يملكه أحد سوى الخادم.

ثم انتبهت إلى خطر أكبر لم يخطر لي.

الحالة الخطرة

يفتح العميل العقد ويقرأه، ثم يوافق. بعدها أفتح العقد بنفسي وأعدّل بندا. لم أزوّر توقيعه ولم أخترق شيئا، ومع ذلك صار النص الذي وافق عليه شيئا آخر، وهو لا يعلم.

هذه ليست ثغرة أمنية، بل ثغرة نزاهة، والثانية أخطر لأنها تقع بحسن نية: تصحيح خطأ إملائي، تحديث رقم، توضيح جملة.

القاعدة التي طبّقتها

العقد يُقفل بمجرد توقيعه، وأي تعديل على عقد سبق إرساله يعيده مسودة: تسقط حالته المرسلة ويلزم إرساله من جديد ليوافق العميل على النص الجديد.

ولا يوجد في النظام مسار يغيّر نصا وافق عليه أحد وتبقى موافقته سارية.

لماذا لم أكتفِ بالتوقيع

التوقيع يثبت أن هذا النص بعينه هو الذي وُقّع، وهذا صحيح ومهم. لكن إذا سمح النظام بتغيير النص بعد التوقيع، صار التوقيع يشير إلى نص لم يعد موجودا، أي دليلا على شيء اختفى.

سجل الموافقة منفصل ولا يُعدَّل

تعيش الموافقة في جدول مستقل لا يقبل إلا الإضافة، وترفض قاعدة البيانات تعديله وحذف ما فيه، ولا عمود لها في جدول العقد أصلا. فلو تغيّر العقد لاحقا بقي الدليل قائما على أن نسخة بعينها وُوفق عليها في وقت بعينه.

المصيدة

تغيير الحالة عند التعديل نصف الحل فقط. يجب كذلك تجميد النسخة الموقّعة حتى لا تختفي، فمن يعدّل عقدا بعد توقيعه يريد نسخة جديدة، والنسخة القديمة دليل يجب أن يبقى.

الاختبار الذي أثبته

اختبار واحد يسد باب الانحدار: عقد موقّع، ثم محاولة تعديل، ثم تحقق من أن الحالة عادت مسودة وأن الموقّع لم يُمس.

اقرأ أيضا

عندك مشروع في بالك؟
قل لي ما الذي تريد بناءه. أول 15 دقيقة استشارة مجانية.
احجز استشارة