الأمان والسلامة
صُمِّم Champollion ليكون آمنًا في البيئات العدائية — حيث قد تأتي بيانات الترجمة المحلية من مصادر غير موثوقة، وحيث يمكن لأسماء الملفات المُصاغة بشكل خبيث أن تتجاوز حدود المجلدات، وحيث يمكن أن تحتوي مخرجات نماذج اللغة الكبيرة (LLM) على أي شيء.
نموذج التهديدات
| التهديد | وسيلة الهجوم | إجراء التخفيف |
|---|---|---|
| تلويث النموذج الأولي (Prototype pollution) | مفاتيح JSON مُصاغة بشكل خبيث (__proto__، constructor) | تُرفض عند التحليل |
| اجتياز المسارات (Path traversal) | رموز لغات مثل ../../etc/passwd | يتم التحقق من عمليات كتابة الملفات لضمان بقائها ضمن المجلدات المُعدّة |
| إتلاف كتل التعليمات البرمجية | يترجم نموذج اللغة الكبير داخل أسوار التعليمات البرمجية | حماية بعلامات حدّية بترميز Unicode |
| مفاتيح مُهلوَسة | يُعيد نموذج اللغة الكبير مفاتيح لم تُرسَل | التحقق من الاستجابة — تُكتب المفاتيح المقبولة فقط |
| إنفاق جامح للرموز (tokens) | حلقات إعادة محاولة لا نهائية | تقييد الميزانية عبر maxRetries |
الحماية من تلويث النموذج الأولي
يتم التحقق من جميع مفاتيح الترجمة المحلية مقابل قائمة حظر قبل المعالجة:
__proto__constructorprototype
أي مفتاح يطابق هذه الأنماط يُرفض مع رسالة خطأ. وهذا يمنع المهاجمين من استخدام ملفات ترجمة محلية مُصاغة بشكل خبيث لتعديل النماذج الأولية لكائنات JavaScript.
احتواء المسارات
عند كتابة ملفات الترجمة المحلية، يتحقق champollion من أن مسار الإخراج يبقى ضمن المجلدات المُعدّة (localesDir، contentDir). تُنقّى رموز اللغات — فرمز مثل ../../secrets لا يمكنه الكتابة خارج المجلد المتوقع.
حماية الكتل
أثناء ترجمة محتوى Markdown، تُستبدل العناصر المهيكلة بعلامات حدّية مؤقتة بترميز Unicode قبل إرسال النص إلى نموذج اللغة الكبير:
- كتل التعليمات البرمجية (المُسوّرة والمضمّنة) → علامة حدّية
- رموز Hugo المختصرة (shortcodes) (
{{< >}}،{{% %}}) → علامة حدّية - HTML خام → علامة حدّية
- متغيرات الاستيفاء (
{{ .Count }}) → علامة حدّية
بعد الترجمة، تُستبدل العلامات الحدّية بالمحتوى الأصلي. لا يرى نموذج اللغة الكبير كتل التعليمات البرمجية أو الرموز المختصرة أو HTML أبدًا — فلا يمكنه إتلافها.
التحقق من الاستجابة
عندما يُعيد نموذج اللغة الكبير استجابة JSON، يتحقق champollion من أن:
- المفاتيح التي أُرسلت في الدفعة فقط هي التي تظهر في الاستجابة
- لا تُحقَن أي مفاتيح إضافية
- الاستجابة قابلة للتحليل كصيغة JSON صالحة
تُحذف المفاتيح المُهلوَسة بصمت. وهذا يمنع مخرجات نموذج اللغة الكبير من حقن ترجمات غير متوقعة في ملفات الترجمة المحلية لديك.
بوابة الجودة
يتم التحقق من كل ترجمة عبر خمسة فحوصات حتمية قبل كتابتها على القرص. راجع بوابة الجودة للتفاصيل.
التراجع الأسي (Exponential Backoff)
تستخدم استدعاءات واجهة برمجة التطبيقات التراجع الأسي مع التشويش العشوائي (jitter) عند استجابات 429 (تجاوز حد المعدل) و5xx (خطأ الخادم). ثلاث محاولات إعادة مع تأخير متزايد تمنع إغراق واجهة برمجة التطبيقات بالطلبات أثناء الانقطاعات.
مهلة الطلب
لكل طلب واجهة برمجة تطبيقات مهلة قدرها 30 ثانية عبر AbortController. وهذا يمنع تعليق عملية المزامنة إلى أجل غير مسمى بسبب اتصال ميت.
إخفاقات الترجمة الصريحة (Fail-Loud)
عندما تكون واجهة برمجة التطبيقات غير متاحة أو تفشل ترجمة ما، يطلق champollion خطأً صريحًا مع إرشادات قابلة للتنفيذ بدلًا من كتابة بيانات تالفة بصمت. لا تُكتب أبدًا عناصر نائبة تبدأ بالبادئة [EN] أثناء المزامنة.
[ERR] Content sync for fr: no API key available.
Set OPENROUTER_API_KEY in .env.local to translate content.
فشل ملف واحد لا يوقف المزامنة بأكملها — يُسجَّل الخطأ ويواصل خط المعالجة إلى الملف التالي، بحيث تحصل على أقصى تقدم ممكن في كل تشغيل.
التحقق بعد المزامنة
بعد اكتمال جميع الترجمات، يعيد champollion قراءة ملفات الترجمة المحلية المكتوبة من القرص ويجري جولة تحقق. وهذا يسد الفجوة بين إبلاغ المزامنة بالنجاح وكون الترجمات خاطئة في الواقع:
- تطابق المفاتيح — جميع مفاتيح المصدر موجودة في كل هدف
- علامات
[EN]— علامات احتياطية قديمة من عمليات تشغيل سابقة - الترجمات الفارغة — قيم فارغة تسللت عبر العملية
- الامتثال للنظام الكتابي — لغات غير لاتينية بترجمات تقتصر على أحرف ASCII
- الحفاظ على العناصر النائبة — تطابق عناصر ICU النائبة مع المصدر
يمكن التخطي باستخدام --no-verify أو التشغيل بشكل مستقل باستخدام npx champollion verify.
الاختبار
يتم التحقق من الخصائص الأمنية بواسطة مجموعة الاختبارات العدائية:
npm run test:redteam # prototype pollution, path traversal, encoding attacks
انظر أيضًا
- البنية المعمارية — كيفية ترابط منظومة الأجزاء الثلاثة
- مرجع واجهة سطر الأوامر — integrity — أمر فحص السلامة
- مرجع واجهة سطر الأوامر — provenance — أمر تدقيق المصدر
- مواصفات الإضافات — حقول المصدر في بيانات تعريف الإضافات
- بوابة الجودة — فحوصات السلامة على مستوى الترجمة