Skip to content

محرك السياسات و Hooks

محرك السياسات هو طبقة التنفيذ التي تقع بين LLM والعالم الخارجي. يعترض كل إجراء في نقاط حرجة في تدفق البيانات ويتخذ قرارات حتمية ALLOW أو BLOCK أو REDACT. لا يستطيع LLM تجاوز هذه القرارات أو تعديلها أو التأثير عليها.

المبدأ الأساسي: التنفيذ أسفل LLM

طبقات تنفيذ السياسات: LLM يقع فوق طبقة السياسات، التي تقع فوق طبقة التنفيذ

SECURITY يقع LLM فوق طبقة السياسات. يمكن حقنه بـ prompt، أو كسره،

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

أنواع Hook

ثمانية hooks تنفيذية تعترض الإجراءات في كل نقطة حرجة في تدفق البيانات.

بنية Hook

تدفق سلسلة Hook: PRE_CONTEXT_INJECTION ← سياق LLM ← PRE_TOOL_CALL ← تنفيذ الأداة ← POST_TOOL_RESPONSE ← استجابة LLM ← PRE_OUTPUT ← قناة المخرجات

جميع أنواع Hook

Hookالمُشغلالإجراءات الرئيسيةوضع الفشل
PRE_CONTEXT_INJECTIONمدخل خارجي يدخل السياقتصنيف المدخل، تعيين taint، إنشاء نسب، فحص الحقنرفض المدخل
PRE_TOOL_CALLLLM يطلب تنفيذ أداةفحص الصلاحيات، حد المعدل، التحقق من المعاملاتحظر استدعاء الأداة
POST_TOOL_RESPONSEالأداة تُعيد بياناتتصنيف الاستجابة، تحديث taint الجلسة، إنشاء/تحديث النسبتنقيح أو حظر
PRE_OUTPUTالاستجابة على وشك مغادرة النظامفحص التصنيف النهائي مقابل الهدف، فحص PIIحظر المخرج
SECRET_ACCESSPlugin يطلب بيانات اعتمادتسجيل الوصول، التحقق من الصلاحية مقابل النطاق المُعلنرفض بيانات الاعتماد
SESSION_RESETالمستخدم يطلب إعادة تعيين taintأرشفة النسب، مسح السياق، التحقق من التأكيدطلب التأكيد
AGENT_INVOCATIONوكيل يستدعي وكيلاً آخرالتحقق من سلسلة التفويض، تنفيذ سقف taintحظر الاستدعاء
MCP_TOOL_CALLأداة خادم MCP تُستدعىفحص سياسة Gateway (حالة الخادم، صلاحيات الأداة، المخطط)حظر استدعاء MCP

واجهة Hook

كل hook يستلم سياقاً ويُعيد نتيجة. المُعالج هو دالة صرفة متزامنة.

typescript
interface HookContext {
  readonly sessionId: SessionId;
  readonly hookType: HookType;
  readonly timestamp: Date;
  // الحمولة الخاصة بـ hook تختلف حسب النوع
}

interface HookResult {
  readonly decision: "ALLOW" | "BLOCK" | "REDACT";
  readonly reason: string;
  readonly metadata?: Record<string, unknown>;
}

type HookHandler = (context: HookContext) => HookResult;

HookHandler متزامن ويُعيد HookResult مباشرةً -- وليس Promise. هذا

بالتصميم. يجب أن تكتمل hooks قبل أن يتقدم الإجراء، وجعلها متزامنة يلغي أي إمكانية لتجاوز async. إذا انتهت مهلة hook، يُرفض الإجراء. :::

ضمانات Hook

كل تنفيذ hook يحمل أربعة ثوابت:

الضمانما يعنيه
حتمينفس المدخلات تنتج دائماً نفس القرار. بدون عشوائية. بدون استدعاءات LLM داخل hooks. بدون استدعاءات API خارجية تؤثر على القرارات.
متزامنتكتمل hooks قبل أن يتقدم الإجراء. لا يمكن التجاوز async. انتهاء المهلة يعني الرفض.
مُسجلكل تنفيذ hook يُسجل: معاملات المدخل، القرار المُتخذ، الطابع الزمني، وقواعد السياسات المُقيّمة.
غير قابل للتزويرمخرجات LLM لا يمكن أن تحتوي على تعليمات تجاوز hook. طبقة hook ليس لديها منطق "تحليل مخرجات LLM بحثاً عن أوامر".

تسلسل قواعد السياسات الهرمي

قواعد السياسات منظمة في ثلاثة مستويات. لا تستطيع المستويات الأعلى تجاوز المستويات الأدنى.

قواعد ثابتة (مُنفذة دائماً، غير قابلة للتكوين)

هذه القواعد مُرمزة ولا يمكن تعطيلها من أي مسؤول أو مستخدم أو تكوين:

  • منع الكتابة للأسفل: تدفق التصنيف أحادي الاتجاه. لا يمكن للبيانات أن تتدفق إلى مستوى أقل.
  • قنوات UNTRUSTED: لا بيانات تدخل أو تخرج. نقطة.
  • Taint الجلسة: بمجرد التصعيد، يبقى مُصعداً طوال عمر الجلسة.
  • تسجيل التدقيق: جميع الإجراءات تُسجل. بدون استثناءات. بدون طريقة للتعطيل.

قواعد قابلة للتكوين (قابلة للضبط من المسؤول)

يمكن للمسؤولين ضبط هذه من خلال واجهة المستخدم أو ملفات التكوين:

  • تصنيفات التكاملات الافتراضية (مثل Salesforce يُعامل كـ CONFIDENTIAL افتراضياً)
  • تصنيفات القنوات
  • قوائم السماح/الرفض للإجراءات لكل تكامل
  • قوائم النطاقات المسموحة للاتصالات الخارجية
  • حدود المعدل لكل أداة أو مستخدم أو جلسة

مخرج طوارئ تصريحي (مؤسسي)

يمكن لعمليات النشر المؤسسية تحديد قواعد سياسات مخصصة في YAML مُهيكل لسيناريوهات متقدمة:

yaml
# حظر أي استعلام Salesforce يحتوي على أنماط SSN
hook: POST_TOOL_RESPONSE
conditions:
  - tool_name: salesforce.*
  - content_matches: '\b\d{3}-\d{2}-\d{4}\b'
action: REDACT
redaction_pattern: "[SSN REDACTED]"
log_level: ALERT
notify: security-team@company.com
yaml
# طلب الموافقة للمعاملات عالية القيمة
hook: PRE_TOOL_CALL
conditions:
  - tool_name: stripe.create_charge
  - parameter.amount: ">10000"
action: REQUIRE_APPROVAL
approvers:
  - role: finance-admin
timeout: 1h
timeout_action: DENY
yaml
# قيد زمني: لا إرسال خارجي بعد ساعات العمل
hook: PRE_OUTPUT
conditions:
  - recipient_type: EXTERNAL
  - time_of_day: "18:00-08:00"
  - day_of_week: "Mon-Fri"
action: BLOCK
reason: "External communications restricted outside business hours"

يجب أن تجتاز قواعد YAML المخصصة التحقق قبل التفعيل. تُرفض القواعد غير

الصالحة وقت التكوين، وليس وقت التشغيل. هذا يمنع سوء التكوين من إنشاء فجوات أمنية. :::

تجربة مستخدم الرفض

عندما يحظر محرك السياسات إجراءً، يرى المستخدم شرحاً واضحاً -- وليس خطأ عاماً.

الافتراضي (محدد):

لا أستطيع إرسال بيانات سرية إلى قناة عامة.

  -> إعادة تعيين الجلسة وإرسال الرسالة
  -> إلغاء

اختياري (تعليمي):

لا أستطيع إرسال بيانات سرية إلى قناة عامة.

السبب: هذه الجلسة وصلت إلى Salesforce (CONFIDENTIAL).
WhatsApp الشخصي مُصنف كـ PUBLIC.
يمكن للبيانات أن تتدفق فقط إلى تصنيف مساوٍ أو أعلى.

الخيارات:
  -> إعادة تعيين الجلسة وإرسال الرسالة
  -> اطلب من المسؤول إعادة تصنيف قناة WhatsApp
  -> معرفة المزيد: [رابط الوثائق]

الوضع التعليمي اختياري ويساعد المستخدمين على فهم لماذا تم حظر الإجراء، بما في ذلك مصدر البيانات الذي تسبب في تصعيد taint وما هو عدم تطابق التصنيف. كلا الوضعين يقدمان خطوات تالية قابلة للتنفيذ بدلاً من أخطاء مسدودة.

كيف تتسلسل Hooks معاً

في دورة طلب/استجابة نموذجية، تُطلق hooks متعددة بالتسلسل. كل hook لديه رؤية كاملة للقرارات التي اتخذتها hooks السابقة في السلسلة.

المستخدم يُرسل: "تحقق من خط أنابيب Salesforce وأرسل رسالة لزوجتي"

1. PRE_CONTEXT_INJECTION
   - مدخل من المالك، مُصنف كـ PUBLIC
   - Taint الجلسة: PUBLIC

2. PRE_TOOL_CALL (salesforce.query_opportunities)
   - الأداة مسموحة؟ نعم
   - المستخدم لديه اتصال Salesforce؟ نعم
   - حد المعدل؟ مقبول
   - القرار: ALLOW

3. POST_TOOL_RESPONSE (نتائج salesforce)
   - البيانات مُصنفة: CONFIDENTIAL
   - Taint الجلسة يتصاعد: PUBLIC -> CONFIDENTIAL
   - إنشاء سجل نسب

4. PRE_TOOL_CALL (whatsapp.send_message)
   - الأداة مسموحة؟ نعم
   - القرار: ALLOW (فحص مستوى الأداة يمر)

5. PRE_OUTPUT (رسالة للزوجة عبر WhatsApp)
   - Taint الجلسة: CONFIDENTIAL
   - التصنيف الفعلي للهدف: PUBLIC (مستلم خارجي)
   - CONFIDENTIAL -> PUBLIC: محظور
   - القرار: BLOCK
   - السبب: "classification_violation"

6. الوكيل يعرض خيار إعادة التعيين للمستخدم