الأمان
القواعد الـ 13 التي تفرضها قاعدة البيانات، وحارس العرض، وكيف تُفحص الطلبات الصادرة وإعادات التوجيه.
يسعّر المؤمّنون بناءً على أرقام Pruva، لذا لا يجوز أن تعتمد قواعد الوصول على حسن سلوك التطبيق. تُفرَض كل قاعدة أدناه في Postgres بأمان على مستوى الصف أو منح الأعمدة أو المشغّلات. ولكل منها اختبار في مجموعة RLS يسجّل الدخول بالدور المعني ويتحقق من أن الإجراء الممنوع يفشل.
القواعد الـ 13
- المتجر وحده يغيّر ما دفعته مساحة العمل. لا يستطيع كتابة الفئة والحالة ونهاية الفترة في استحقاق إلا دور خدمة المتجر. المالك الذي يحاول ضبط وحدة على
activeيحصل على خطأ. - تبدأ الوحدات الجديدة مقفلة، ولا يمكن تشغيل وحدة مقفلة. الاستحقاقات تكون
lockedافتراضيًا. لا يستطيع المالك تفعيل وحدة مقفلة، مثل المستندات في العرض. - لا يكتب القراءات إلا الخدمة. ليس لبيانات الحسّاسات ودرجات المخاطر والانبعاثات وتصنيفات CII والوثائق حقوق إدراج أو تحديث أو حذف للمستخدمين الذين سجّلوا الدخول. حتى المالك لا يستطيع تغييرها.
- قرارات القسط تحتاج إلى
publish، والمراجع مثبَّت. يحتاج قبول تعديل القسط أو رفضه إلىpublishعلى التأمين. تضبط قاعدة البيانات المراجع على الشخص الذي يجري التغيير؛ ويُستبدل المراجع المزوَّر. - إخطار الطاقم يحتاج إلى
publish، ولا يستطيع الوكلاء فعله أبدًا. يحتاج تعليم تنبيه على أن الطاقم أُخطر إلىpublishعلى الصيانة التنبؤية. يُرفض الوكلاء حتى لو حاول أحد منحه. - قيم نموذج التنبيه للقراءة فقط. يستطيع المستخدمون تحديث حالة التنبيه وملاحظته. لا يكتب الشدّة والاحتمال والنافذة إلا النموذج.
- انعدام الوصول يعني انعدام الصفوف. تُرجع الوحدة المقفلة أو المطفأة، أو مستوى
none، صفر صفوف من كل جدول في تلك الوحدة. يقرأ مكتتب التأمين صفر تنبيهات. ويقرأ الجميع صفر مستندات ما دامت المستندات مقفلة. - لا يرى مكتتب التأمين إلا السفن المشاركة. في العرض ذلك 6 من 18. انظر مشاركة السفن.
- لا يمكن إعادة كتابة الإشعارات. يستطيع المستخدمون فقط تعليم إشعار كمقروء. يفشل تغيير عنوانه أو نصه أو رابطه، مثلًا إلى صفحة تصيّد.
- لا تُكتب إدخالات التدقيق إلا باسمك. يجب أن يسمّي الإدخال المستخدم الذي سجّل الدخول بوصفه الفاعل. يفشل كتابة إدخال باسم وكيل أو شخص آخر.
- لا يحمل الوكلاء
publishأبدًا، ولا يستطيع الأعضاء تغيير الوصول. يفشل منحpublishلوكيل. المالكون والمسؤولون فقط يستطيعون تغيير مستويات الوصول. - تقديم التقرير يحتاج إلى
publishوهو مثبَّت. يحتاج تقديم تقرير إلىpublishعلى الانبعاثات. تسجّل قاعدة البيانات من قدّمه ومتى. - المالكون والمسؤولون فقط يغيّرون الاتصالات. يختار الأشخاص ما إذا كان الموصّل مشغّلًا، والحساب، ونقطة نهاية
https. لا تأتي الحالة وآخر مزامنة ونص المشكلة إلا من خدمة المزامنة، لذا لا يمكن تعليم اتصال معطوب على أنه سليم يدويًا.
وضع العرض
- لا طلبات خارجية. في وضع العرض يقرأ التطبيق بيانات مولَّدة ولا يستدعي أي خدمة خارجية. تحجب اختبارات الطرف إلى الطرف طلبات الأطراف الثالثة وتفشل إذا جُرّب أي منها.
- مرفوض في الإنتاج. إذا كان
DEMO_MODE=trueوNODE_ENV=production، يتوقف التطبيق عند الإقلاع بخطأ. يجب أن يضبط العرض العام من دون بيانات حقيقيةALLOW_DEMO_IN_PROD=1عن قصد. - ظاهر. يقول شريط على كل صفحة إنه عرض، وكل زر كان سيرسل أو ينشر أو ينفق يعرض إشعارًا بدلًا من ذلك.
الطلبات الصادرة
يمر أي عنوان URL يدخله مستخدم، مثل خطاف بوابة أو عنوان بوابة المؤمّن، بحارس عناوين URL قبل استدعائه. يسمح بما يلي:
httpsفقط، على المنفذ الافتراضي،- من دون اسم مستخدم أو كلمة مرور في عنوان URL،
- من دون
localhostأو.localأو.internalأو أسماء مضيف من تسمية واحدة، - من دون عناوين IP في النطاقات الخاصة أو المحجوزة (IPv4 وIPv6).
يتحقق المستدعي أيضًا من العنوان الذي حُلّ قبل الاتصال مباشرة، فيُرفض اسم مضيف يشير لاحقًا إلى عنوان خاص.
إعادات التوجيه الآمنة
بعد تسجيل الدخول، لا تعيد Pruva التوجيه إلا إلى مسار على الموقع نفسه. تعود قيمة next مثل //evil.example، أو عنوان URL كامل، أو حيلة الشرطة المائلة العكسية، أو محرف تحكم، إلى /app.
رسالة المتجر
يوقّع الموقع كل عملية إتمام شراء بـ HMAC-SHA256 وسر مشترك. يرفض التطبيق توقيعًا خاطئًا أو رسالة أقدم من 5 دقائق. في الإنتاج لن يوقّع الموقع بالسر التجريبي المضمَّن. انظر الاستحقاقات.
الإبلاغ عن مشكلة
هذا إصدار خاص. أبلغ عن مشكلات الأمان مباشرة إلى فريق Pruva، لا في قناة عامة.