آخر تحديث · ١٣ سبتمبر ٢٠٢٦
الأمان
وصف لما هو منفَّذ في النظام اليوم، بحدوده. كل بند أدناه قابل للتحقق في الكود، والبنود التي لم تُنفَّذ بعد مذكورة في آخر الصفحة بدل أن تُترك للتخمين.
الصفحات الثلاث التالية تصف ما هو منفَّذ فعليًا في النظام اليوم، ومكتوبة لتُقرأ ويُتحقق منها. وهي ليست استشارة قانونية، ولا تغني العيادة عن مراجعة التزاماتها الخاصة تجاه مرضاها مع مستشارها القانوني.
التشفير — ونطاقه
- أسرار تكامل العيادةتوكن واتساب، ومفتاح Paymob السري، وسر التوقيع الخاص به — تُخزَّن مشفّرة بخوارزمية AES-256-GCM، بمتجه تهيئة عشوائي لكل قيمة ووسم مصادقة يمنع تعديلها دون كشف. والمفتاح يجب أن يكون ٣٢ بايت بالضبط، وإلا رفض الخادم العمل من الأساس.
- كلمات المرورتُخزَّن مجزّأة بخوارزمية bcrypt بمعامل كلفة ١٢، ولا تُخزَّن كنص أبدًا ولا يمكن استرجاعها. حتى مقارنة الأسرار الداخلية تتم بمقارنة ثابتة الزمن حتى لا يسرّب زمن الرد شيئًا.
- أثناء النقلكل الاتصالات بالنظام تمر عبر HTTPS.
وما لا يشمله ذلك، بوضوح: بيانات المرضى والملف الطبي تُخزَّن في قاعدة البيانات كنص عادي، وليست مشفّرة على مستوى الحقل. حمايتها قائمة على التحكم في الوصول وعزل العيادات وحدود الشبكة الموصوفة أدناه، لا على التشفير. نذكر ذلك لأن عبارة «بياناتك مشفّرة» أوسع مما يفعله النظام بالفعل.
عزل العيادات — ثلاث طبقات
العزل بين العيادات ليس شرطًا واحدًا في استعلام، بل ثلاث طبقات مستقلة، كل واحدة تمسك لو أخطأت التي فوقها:
- هوية العيادة تأتي من التوكنمعرّف العيادة يُقرأ من توكن الجلسة بعد التحقق من توقيعه، ولا يُقرأ من الطلب أبدًا. فلا يستطيع طلب أن «يدّعي» عيادة أخرى.
- قاعدة البيانات ترفض التجاوز بنفسهاالمفاتيح الأجنبية مركّبة على (معرّف العيادة، المعرّف) لا على المعرّف وحده. فلو حدث خطأ برمجي وحاول ربط حجز بطبيب من عيادة أخرى، ترفضه Postgres نفسها بصرف النظر عن التطبيق.
- التضييق داخل العيادةالموظف المرتبط بفروع بعينها لا يرى غيرها، والطبيب لا يرى إلا مرضاه هو. والحالة الحرجة محسوبة: من لا فروع له يرى «لا شيء»، لا «كل شيء».
من يرى الملف الطبي
قاعدة واحدة مكتوبة في موضع واحد، تستدعيها كل نقطة يمكن أن يظهر منها تشخيص أو روشتة أو طلب تحليل — بما فيها النقاط التي تضمّنه داخل رد أكبر، وهي التي يسهل نسيانها.
الوصول لأطباء العيادة ومالكها ومديرها. والاستقبال والسكرتارية ومدير الفرع يرون الشكل الإداري للزيارة دون محتواها.
والحساب الذي يدير المنصة نفسها مستبعد من هذا الوصول عمدًا: أن يستطيع مشغّل خدمة مثل هذه قراءة تشخيصات مرضى عملائه هو بالضبط الصلاحية التي لا ينبغي أن توجد. وكذلك حساب الأتمتة الداخلي، فلا شيء في مساره يحتاج محتوى إكلينيكيًا.
الزيارة بعد توقيعها
لا يمكن توقيع زيارة بلا تشخيص. وبعد التوقيع تُتاح فترة قصيرة للتصحيح، ثم يُقفل التعديل ولا تُضاف إلى الزيارة إلا ملاحق مؤرّخة باسم كاتبها.
والزيارة تبقى وإن غادر من كتبها: حذف حساب موظف لا يحذف السجل الطبي الذي كتبه، ولا قرارات المراجعة التي اتخذها.
الحسابات والجلسات
- كوكي الجلسةلا يمكن لجافاسكربت في المتصفح قراءته، ولا يُرسَل إلا عبر HTTPS في الإنتاج، وعمره اثنتا عشرة ساعة.
- تغيير كلمة المرور يُنهي الجلسات الأخرىكل توكن صدر قبل لحظة التغيير يتوقف عن العمل فورًا، وتستمر الجلسة التي أجرت التغيير وحدها. فتغيير كلمة المرور إلغاء فعلي للوصول، لا مجرد تعديل قيمة.
- التعطيل يسري فورًاحالة العيادة تُعاد قراءتها مع كل طلب، فتعطيل عيادة أو انتهاء اشتراكها يسري من الطلب التالي مباشرة، لا عند انتهاء صلاحية آخر توكن صادر.
- الصلاحياتلكل موظف دور وفروع محدّدة يضبطها مالك العيادة أو مديرها، وكل تغيير عليها يُسجَّل في سجل التدقيق.
الحماية من تخمين كلمات المرور
التحقق يجري على بُعدين معًا، ولا بد من اجتيازهما:
- لكل عنوان شبكةحد عام على الطلبات، وحد أوسع قليلًا على صفحة الدخول — لأن عيادة كاملة قد تشترك في اتصال واحد، وحد ضيق هنا يعني حبس الموظفين خارج نظامهم بسبب أخطاء كتابة.
- لكل بريد إلكترونيخمس محاولات في الدقيقة للبريد الواحد مهما تغيّر مصدرها. وهذا هو الحد الذي يستهدف تخمين كلمات المرور فعلًا، لأن تغيير عنوان الشبكة لا يتجاوزه.
- وعلى تغيير كلمة المرور كذلكلأن هذه النقطة تتحقق من كلمة المرور الحالية، وتركها مفتوحة يحوّل جلسة مسروقة إلى وسيلة غير محدودة لتخمينها.
الشبكة
- حدود الواجهة البرمجيةترويسات حماية قياسية على كل رد، ونطاقات لوحة التحكم المصرّح لها محدّدة بالاسم في الإنتاج لا مفتوحة.
- نقاط الأتمتة الداخليةغير قابلة للوصول من خارج الشبكة الداخلية، وتتطلب فوق ذلك تفويضًا قصير الأجل يصدره الخادم نفسه لعيادة بعينها — فلا يكفي امتلاك المفتاح المشترك للتصرف باسم أي عيادة.
- لوحات التشغيلواجهة الأتمتة وواجهة ربط واتساب محميتان بطبقة تحقق إضافية فوق تحققهما الخاص، لأن الوصول إلى الثانية يعني إمكانية ربط جهاز جديد بحساب واتساب العيادة.
الدفع
الدفع أونلاين يتم على صفحة Paymob. بيانات البطاقة لا تمر بنظامنا ولا تُخزَّن لدينا.
وإشعار نتيجة الدفع لا يُقبل لمجرد وصوله: يُتحقق من توقيعه بمفتاح العيادة المخزَّن مشفّرًا، بمقارنة ثابتة الزمن. وإشعار بلا توقيع صحيح يُرفض.
وفي حالة تحويل المحفظة، تُحفظ صورة الإيصال مع من راجعها ووقت مراجعته وسبب الرفض إن رُفض — لأن المبلغ لم يمر بالنظام، فالسجل هو الدليل الوحيد. ونوع الصورة يُستنتج من محتواها لا مما أعلنه الهاتف المرسِل.
النسخ الاحتياطي
نسخة يومية آلية في الثالثة والنصف صباحًا بتوقيت القاهرة، تشمل قاعدة بيانات العيادات، وقاعدة بيانات ربط واتساب، وملف الأتمتة، وملف الأسرار.
- ملف الأسرار مشفّر ومُختبَريُشفَّر بخوارزمية AES-256-CBC باشتقاق مفتاح بمئتي ألف تكرار، ثم يُفَك فورًا ويُقارَن بالأصل. وإن لم يتطابق، تُعتبر النسخة فاشلة ولا يُوثق بها.
- بصمات للتحققلكل ملف في النسخة بصمة SHA-256 مسجّلة في كشف يرافقها.
- نسخة خارج الخادمتُسحب النسخة يوميًا إلى جهاز خارج الخادم ويُتحقق من كل ملف فيها مقابل الكشف قبل أن تُعتمد — حتى لا يترك نقل منقطع شيئًا يبدو نسخة وليس نسخة. ويُراقَب عمر أحدث نسخة على الخادم يوميًا، فتوقُّف النسخ لا يمر صامتًا.
- تمرين استعادةالاستعادة مُجرَّبة فعليًا من نسخة إنتاج، لا موصوفة على الورق فقط.
حدود ما هو منفَّذ اليوم
ما يلي غير منفَّذ، ونذكره لأن صمتنا عنه قد يُقرأ على أنه موجود:
- لا شهادات امتثاللا نحمل شهادة HIPAA ولا GDPR ولا ISO ولا SOC 2، ولا ندّعي أيًّا منها. من يحتاج شهادة بعينها فهذه ليست المنصة التي تقدّمها اليوم.
- لا مصادقة ثنائيةالدخول بكلمة مرور فقط، بلا رمز إضافي من الهاتف.
- الملف الطبي غير مشفّر على مستوى الحقلكما ورد في أول الصفحة.
- لا حذف تلقائي بعد مدةالحذف بطلب ويدوي — التفصيل في صفحة الخصوصية.
- لا التزام بنسبة تشغيللا نعلن نسبة توفّر ولا اتفاقية مستوى خدمة، لأن إعلان رقم لا يقيسه شيء ليس التزامًا.
- لا اختبار اختراق مستقللم يُجرَ اختبار اختراق خارجي حتى تاريخ هذه الصفحة.
الإبلاغ عن ثغرة
إن وجدت ثغرة أمنية، أبلغنا بها مباشرة عبر واتساب من زر «اطلب عرض سعر» في الصفحة الرئيسية، ولا تنشرها قبل أن تصلك إجابة. نرد على بلاغات الأمان قبل غيرها.
التواصل
لأي سؤال عن هذه الصفحات، أو لطلب تصدير بيانات أو حذفها، تواصل مع إدارة المنصة عبر واتساب من زر «اطلب عرض سعر» في الصفحة الرئيسية. طلبات المرضى المتعلقة ببياناتهم تُوجَّه إلى العيادة أولًا، لأنها الجهة المتحكّمة في تلك البيانات.