الأمان المحلي
- معيارية
- مسودة 1.0
- آخر تحديث
- عرض بصيغة Markdown
10.1 الأساس
الاستماع إلى localhost وحده ليس أمانًا مطلقًا، فما زال بوسع صفحة ويب خبيثة أن تحاول الوصول إلى المنافذ المحلية. ولذلك يجمع LMSP بين عدة تدابير.
- يجب على الخدمة أن ترتبط افتراضيًا بعناوين loopback. ولا يجوز لها أن تستمع إلى
0.0.0.0أو أي عنوان آخر غير loopback ما لم يكن وضع LAN مفعّلًا (القسم 10.5). - عند أول تشغيل، ينبغي للخدمة أن تولّد سرًّا عشوائيًا للخدمة عالي الإنتروبيا، وأن تستخدمه، بدلًا من أي قيمة افتراضية مضمَّنة، لإصدار الرموز والتحقق منها.
- يجب أن يحمل كل طلب إلى الواجهة الأساسية رمز Bearer صالحًا، باستثناء نقاط نهاية التهيئة المذكورة في القسم 4.2. فالقدوم من loopback لا يكفي وحده أبدًا.
10.2 الاقتران والرموز
يحصل العميل على رمز Bearer خاص به برمز اقتران محلي. يطلب المستخدم من الخدمة عرض رمز اقتران، بالطريقة التي تقدمها الخدمة، ويرسله العميل:
POST /lmsp/v1/pair
Content-Type: application/json
{
"client_name": "example-client",
"pairing_code": "K7QD-4M2X",
"scopes": ["inference"]
}
| حقل الطلب | المعنى |
|---|---|
client_name |
اسم العرض للعميل، ويظهر للمستخدم. |
pairing_code |
الرمز الذي حصل عليه المستخدم من الخدمة. |
scopes |
قائمة اختيارية بالنطاقات المطلوبة. والافتراضي ["inference"]. |
ترد الخدمة برمز. وtoken_type هو دائمًا Bearer:
{
"client_id": "cli_01J8MAT3W6X9B2D5F8H1K4N7QZ",
"access_token": "lmsp_example_3f9a1c52e7d84b60",
"token_type": "Bearer",
"scopes": ["inference"]
}
ثم يرسل العميل Authorization: Bearer <token> مع كل طلب.
- يجب أن يكون رمز الاقتران للاستخدام مرة واحدة، وينبغي أن تنتهي صلاحيته خلال 5 دقائق. وينبغي أن يحمل 40 بتًا من الإنتروبيا على الأقل. ويجب على الخدمة أن تحدّ من معدل المحاولات الفاشلة. والرمز الخاطئ أو المنتهي يُرد عليه بـ
401معunauthorized. - الرموز مستقلة لكل عميل، فيستطيع المستخدم سحب رمز عميل دون التأثير في الآخرين. وينبغي للخدمة أن تتيح للمستخدم سرد العملاء المقترنين وسحب رموزهم.
- ينبغي للعميل أن يحتفظ برمزه في سلسلة مفاتيح نظام التشغيل أو مدير بيانات الاعتماد فيه. وينبغي للخدمة أن تخزّن تجزئة كل رمز فقط.
- الرمز المفقود أو غير الصالح أو المسحوب يُرد عليه بـ
401معunauthorizedوترويسةWWW-Authenticate: Bearer. والرمز الصالح الذي يفتقر إلى النطاق الذي تحتاجه نقطة النهاية يُرد عليه بـ403معforbidden.
10.3 النطاقات
الأذونات مقسمة إلى نطاقات منفصلة. فتنزيل النماذج وحذفها وتنفيذ الأدوات لا تركب أبدًا على نطاق الاستدلال.
| النطاق | يتيح |
|---|---|
inference |
قراءة فهرس النماذج، وإنشاء الاستجابات والمهام، وقراءة مهام العميل نفسه وإلغاءها. |
models:manage |
تحميل النماذج وإلغاء تحميلها. |
models:install |
محجوز. تنزيل النماذج وحذفها. |
tools:execute |
محجوز. تنفيذ الأدوات من جهة الخدمة. |
المهام والاستجابات المخزَّنة تخص العميل الذي أنشأها. وينبغي للخدمة أن ترد على طلب عميل آخر كأنها غير موجودة (task_not_found أو response_not_found).
10.4 حماية المتصفح والشبكة
- يجب على الخدمة أن ترفض طلبات المتصفح العابرة للمصادر افتراضيًا، وأن لا تسمح إلا بقيم
Originالمضبوطة صراحةً. والطلب بأيOriginآخر يُرد عليه بـ403معforbidden. - عندما يكون المصدر مسموحًا، ترد الخدمة على طلبات CORS التمهيدية (preflight) له وترسل
Access-Control-Allow-Originبذلك المصدر بعينه، وليس بـ*أبدًا. - يجب على الخدمة أن تتحقق من ترويسة
Host، لمنع DNS rebinding. وهي لا تقبل إلا أسماء المضيف التي تخدمها: أسماء loopback وعناوينها، إضافةً إلى أي أسماء مضبوطة لوضع LAN. وأي قيمة أخرى يُرد عليها بـ403معforbidden.
10.5 وضع LAN
وضع LAN يعني الاستماع خارج عناوين loopback.
- لا يجوز للخدمة أن تفعّل وضع LAN ما لم يشغّله المستخدم صراحةً.
- في وضع LAN يجب على الخدمة أن تشترط المصادقة، وينبغي لها أن تفعّل TLS أيضًا. ولا ينبغي للعميل أن يرسل رمزًا عبر HTTP العادي إلى عنوان غير loopback ما لم يسمح المستخدم بذلك صراحةً.
- إعلان mDNS مسموح في وضع LAN فقط، عندما يكون المستخدم قد شغّل أيضًا اكتشاف الشبكة المحلية (القسم 3.2).
10.6 التسجيل والخصوصية
- لا يجوز أن تظهر مسارات النماذج أو السجلات أو المطالبات أو المحتوى المولَّد في إعلانات mDNS.
- افتراضيًا، ينبغي للخدمة أن تسجّل البيانات الوصفية فقط (الأوقات ونقاط النهاية ورموز الحالة والمعرّفات وأعداد الرموز والمدد). ولا ينبغي لها أن تسجّل المطالبات الكاملة أو المحتوى المولَّد.
- لا يجوز أن تحتوي استجابات الصحة وتفاصيل الأخطاء على مسارات النماذج أو المطالبات أو رموز الوصول أو أي معلومات حساسة أخرى.