الأمان

كيف نبقي تطبيقاتك خاصة ومنفصلة

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

كل طلب يمر بتسجيل الدخول أولًا

كل حركة التطبيقات على *.teamonly.app تذهب أولًا إلى Worker توجيه واحد. يحدد المؤسسة والتطبيق من اسم المضيف، ويتحقق من وجود جلسة صالحة، وبعدها فقط يمرر الطلب إلى التطبيق. دون جلسة، يرى الزائر شاشة تسجيل الدخول. ولا يعمل كود العميل له أبدًا.

هناك ثلاث طرق لتسجيل الدخول: Google OpenID Connect، وMicrosoft (Entra ID) OpenID Connect، أو رمز لمرة واحدة يُرسل إلى عنوان بريد الشركة. مع Google وMicrosoft، يُتحقق من رمز الهوية (ID token) على خادمنا، بما في ذلك التوقيع والجمهور وانتهاء الصلاحية ونطاق البريد. تُفحص قيمة hd من Google من الرمز المُتحقق منه، لا من الطلب. ومع Microsoft، لا تُقبل إلا حسابات العمل والمؤسسات التعليمية، ويجب أن تطابق جهة إصدار الرمز المستأجر الخاص به.

رموز البريد

بدلًا من Google أو Microsoft، يمكن للزميل طلب رمز من 6 أرقام على عنوان العمل. هكذا تستخدم الشركات التي ليس بريدها على Google Workspace أو Microsoft 365 خدمة TeamOnly، دون إعداد. يثبت الرمز أنه يتحكم في صندوق بريد على أحد نطاقات شركتك، وهو ما يثبته تسجيل الدخول عبر Google أو Microsoft. يعمل مع أي مزود بريد. العناوين الشخصية مثل Gmail أو Outlook.com مرفوضة في تطبيقات الشركات.

  • تنتهي صلاحية الرمز بعد 10 دقائق.
  • بعد خمس محاولات خاطئة يتوقف الرمز عن العمل. وعلى الشخص طلب رمز جديد.
  • لا يعمل الرمز إلا في المتصفح الذي طلبه. الرمز الذي قرأه أحدهم من فوق كتفك، أو أُعيد توجيهه، لا ينفع في متصفح آخر.
  • الطلبات محدودة المعدل لكل عنوان بريد ولكل عنوان IP، فلا يستطيع أحد استخدام النموذج لإغراق صندوق بريد.
  • النموذج محمي بـ Cloudflare Turnstile، الذي يتحقق من أن الطالب إنسان لا برنامج نصي.
  • يعطي النموذج الرد نفسه سواء كان العنوان يستطيع تسجيل الدخول أم لا، فلا يكشف من لديه وصول.
  • تُرسل الرموز من signin@teamonly.app، مع ضبط SPF وDKIM وDMARC لتتحقق مزودات البريد من أنها جاءت منا فعلًا.
  • لا تُخزَّن الرموز إلا كقيمة تجزئة (hash)، ويُعاد التحقق من الوصول عند إدخال الرمز، في حال تغيّر في الأثناء.

هوية يستطيع تطبيقك الوثوق بها

يحذف Worker التوجيه أي ترويسات هوية في الطلب الوارد، ثم يضع بنفسه البريد والاسم المُتحقق منهما، مع أدوار الشخص في ذلك التطبيق. وتقدمها SDK لتطبيقك في ctx.user.

عند الباب
incoming request to expenses.acme.teamonly.appx-teamonly-user: ceo@acme.com    removed, not from usx-teamonly-user: dana@acme.com   added from verified sign-in
أسماء الترويسات للتوضيح. تطبيقك يقرأ المستخدم من SDK، لا من الترويسات.

قاعدة بيانات وتخزين ملفات منفصلان لكل تطبيق

يحصل كل تطبيق على قاعدة بيانات D1 خاصة به، تُنشأ عند النشر الأول، وعلى بادئة تخزين R2 خاصة به للملفات. هذه هي روابط البيانات الوحيدة المرتبطة بالتطبيق. تعمل التطبيقات كبرامج نصية منفصلة داخل dispatch namespace في Workers for Platforms، ولا تستطيع الوصول إلى روابط بعضها.

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

مخطط طابق فيه ثلاث غرف: تطبيقات المصروفات والمخزون والبحث. كل غرفة تحتفظ ببياناتها وملفاتها وأسرارها. يحاول تطبيق المصروفات الوصول إلى غرفة المخزون فيصطدم بالجدار. ويحاول تطبيق المخزون الوصول إلى غرفة البحث فيصطدم بالجدار أيضًا. البيانات وملفات تعريف الارتباط والأسرار تبقى في غرفتها.

كل تطبيق في غرفته. البيانات والملفات والكوكيز والأسرار تبقى في الداخل.

أسرار مخزنة خارج الكود

تُضبط الأسرار بـ npx teamonly secrets set وتُخزَّن كأسرار Worker مشفرة مرتبطة بذلك التطبيق وحده. ليست في مستودعك، ولا في الحزمة، ولا تراها التطبيقات الأخرى. ويخبر ملف المهارة الذكاء الاصطناعي ألا يضع المفاتيح في الكود أبدًا.

كوكيز مقصورة على عنوان تطبيق واحد

تُضبط ملفات تعريف ارتباط الجلسة لاسم مضيف التطبيق بالضبط، مثل expenses.acme.teamonly.app، مع Secure وHttpOnly وSameSite. لا تُضبط أبدًا على teamonly.app أو على النطاق الفرعي للمؤسسة، فلا يستطيع تطبيق قراءة جلسة تطبيق آخر.

teamonly.app ليس على Public Suffix List اليوم، لذا تعدّ المتصفحات كل عناوين التطبيقات جزءًا من موقع واحد حين تقرر ما هو same-site. لهذا تُثبَّت كل ملفات تعريف ارتباط الجلسة على عنوان تطبيقها بالضبط. وستذكر هذه الصفحة ذلك إن تغير.

كود العملاء يُعامل على أنه غير موثوق

نفترض أن أي تطبيق قد يحتوي أخطاء أو كودًا عدائيًا، لأن الذكاء الاصطناعي كتب جزءًا منه، وأي أحد قد يخطئ. لهذا تقع المصادقة خارج التطبيق، ولهذا لا يحصل كل تطبيق إلا على موارده، ولهذا لا شيء يرسله التطبيق يمكنه تغيير هوية من سجّل الدخول. ولهذا أيضًا لا يستطيع التطبيق إرسال البريد إلا إلى أشخاص في شركتك، بحد أقصى 100 مستلم في الساعة و500 في اليوم.

أين يعمل

كل شيء يعمل على Cloudflare: Workers وWorkers for Platforms للكود، وD1 لقواعد البيانات، وR2 للملفات، وKV للجلسات. لا نشغّل خوادم خاصة بنا. اختيار منطقة البيانات مشمول في خطة Business، ونضبطه معك عند انضمامك.

ما نضبطه معك، وما لا نفعله أبدًا

في خطة Business نضبط Okta أو مزود SSO آخر مع فريق تقنية المعلومات لديك. وتُضبط سجلات التدقيق ومنطقة البيانات معك بالطريقة نفسها. هي مشمولة في الخطة، وليست مفاتيح تشغّلها بنفسك.

  • يُضبط معك
    Okta وOneLogin وغيرهما من SSO (خطة Business)
  • يُضبط معك
    سجلات التدقيق (خطة Business)
  • يُضبط معك
    اختيار منطقة البيانات (خطة Business)
  • أبدًا
    تطبيقات عامة دون مصادقة

لا نملك اليوم شهادة SOC 2 أو ISO.

الإبلاغ عن مشكلة أمنية

راسلنا على hello@teamonly.dev واكتب Security في عنوان الرسالة. شخص حقيقي يقرأ كل رسالة، وسنرد لنؤكد استلامها. امنحنا من فضلك فرصة معقولة لإصلاح المشكلة قبل أن تنشرها.

الأسئلة الشائعة

أسئلة يطرحها الناس

كل الأسئلة والأجوبة

هل يستطيع تطبيق قراءة قاعدة بيانات تطبيق آخر؟

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

هل يستطيع تطبيق انتحال هوية مستخدم آخر؟

لا أمام نفسه ولا أمامنا. ترويسات الهوية في الطلبات الواردة تُحذف عند الباب وتُستبدل بالترويسات المُتحقق منها، فلا يستطيع الزائر التظاهر بأنه شخص آخر. الهوية التي يراها التطبيق تأتي دائمًا من تسجيل دخول حقيقي.

هل تفهرس محركات البحث التطبيقات؟

لا. كل تطبيق خلف تسجيل الدخول، فلا تصل برامج الزحف إلا إلى شاشة تسجيل الدخول، وكل استجابة، بما فيها تلك الشاشة، ترسل noindex.

الوصول المبكر

انشر أول أداة لك هذا الأسبوع.

TeamOnly في مرحلة الوصول المبكر، وكل الخطط متاحة الآن. جرّبه مجانًا لمدة 14 يومًا دون بطاقة، أو اشترك. في الحالتين، تصبح شركتك جاهزة فورًا، وتنشر أول تطبيق لك بثلاثة أوامر.

جرّبه مجانًا 14 يومًاأو اشترك الآن

لا حاجة إلى بطاقة للتجربة. بعدها من $19 شهريًا، ويمكنك الإلغاء في أي وقت.

لست جاهزًا بعد؟ تابع الجديد

استخدم بريد العمل. نراسلك نادرًا، وفقط عندما يكون هناك جديد يستحق.

أرسل أسئلتك إلى hello@teamonly.dev، وسيرد عليك شخص حقيقي.