
جدار حماية LLM ثنائي الطبقة يحجب مدخلات حقن الأوامر (prompt-injection) عبر قواعد regex بالإضافة إلى مصنّف Gemini، ويلتقط تسريبات الأسرار أو موجهات النظام (system-prompt) في ردود البوت.
عرض توضيحي مباشر: https://prompt-injection-firewall.streamlit.app فيديو توضيحي مدته دقيقتان: https://drive.google.com/file/d/1tzb75nFysisrCYa11Lqj6egDs5VNmc2n/view?usp=drivesdk
جدار حماية من طبقتين لروبوت دعم يعمل بنموذج لغوي كبير (LLM): يفحص ما يرسله المستخدمون، وما يرسله الروبوت في المقابل.
يمكن للمستخدمين محاولة تجاوز قواعد الروبوت ("تجاهل التعليمات السابقة")، أو تغيير شخصيته، أو إجباره على كشف موجه النظام (system prompt) أو الأسرار. يحجب هذا المشروع مثل هذه المدخلات، ويكشف التسريبات في إجابات الروبوت، ويقيس مدى فعاليته، بما في ذلك مواضع فشله.
user input
|
v
[1] Rule layer (regex, fast, free) --match--> BLOCK
|no match
v
[2] LLM classifier (Gemini, JSON output, Pydantic validation, retries, fail-closed) --attack--> BLOCK
|benign
v
AcmeBot (Gemini + system prompt)
|
v
[3] Output check (canary token, secret patterns, system-prompt fragments) --leak--> BLOCK
|clean
v
answer to user
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env # then put your Gemini key in .env
python src\run_eval.py dev
python src\eval_output.py dev
python src\compare.py dev
streamlit run app.py # local demo
النموذج المستخدم: gemini-3.1-flash-lite. قد تُرجع الطبقة المجانية الخطأ 503 عند الانشغال؛ ينتظر الكود ويعيد المحاولة.
لا تشغّل src\build_cases.py إلا إذا أردت إعادة بناء data\cases.jsonl (فهو يستبدله؛ البذرة نفسها تعطي الحالات نفسها).
deepset/prompt-injections (Apache-2.0): 12 هجومًا، 13 حميدة. التقسيم: 15 للتطوير، 10 مخفية.data/train.parquet مضمّن في المستودع (المصدر: deepset/prompt-injections، Apache-2.0).| المجموعة | الطبقة | النتيجة |
|---|---|---|
| dev | القواعد فقط | الكشف 2/9، الإيجابية الكاذبة 0/6 |
| dev | القواعد + Gemini (النهائي) | الكشف 8/9، الإيجابية الكاذبة 0/6 |
| dev | فحص الإخراج (النهائي) | التسريب المكتشف 4/4، الإيجابية الكاذبة 0/4 |
| hidden | القواعد + Gemini | الكشف 3/3، الإيجابية الكاذبة 0/7 |
| hidden | فحص الإخراج | التسريب المكتشف 3/3، الإيجابية الكاذبة 0/1 |
الجدار الناري مقابل عدم وجوده:
| بدون | مع | |
|---|---|---|
| dev: الهجمات التي وصلت إلى البوت | 9/9 | 1/9 |
| dev: الحميدة المحجوبة خطأً | 0/6 | 0/6 |
| hidden: الهجمات التي وصلت إلى البوت | 3/3 | 0/3 |
| hidden: الحميدة المحجوبة خطأً | 0/7 | 0/7 |
تحتوي المجموعة المخفية على 3 هجمات فقط، لذا فهي إشارة ضعيفة. يُبلَّغ عن dev وhidden بشكل منفصل لأنني ضبطت مطالبة المصنّف على dev.
السجل الكامل بالأرقام موجود في CHANGELOG.md. باختصار: