ملخص: يعالج Bank Statement Parser جميع البيانات محليًا، وينقّح PII افتراضيًا، ويُقوّي تحليل XML ضد هجمات XXE، ويُشغّل نماذج LLM محليًا ع��ر Ollama، ويأتي مع تبعيات مقفلة بـ SHA-256 hash وCycloneDX SBOM.
الأمان بالتصميم
صُمم Bank Statement Parser لمعالجة البيانات المالية الحساسة. كل قرار تصميمي يُعطي الأولوية للأمان والخصوصية وقابلية التدقيق.
صفر اعتماد على السحابة
تتم جميع المعالجة محليًا داخل بيئة التشغيل الخاصة بك. المحللات الحتمية لا تُجري أي اتصال بالشبكة. خط أنابيب PDF الهجين يستخدم Ollama للاستدلال المحلي بنماذج LLM — لا تُرسل بيانات إلى APIs سحابية. محللات XML مُعدة صراحةً بـ no_network=True وresolve_entities=False وload_dtd=False لمنع أي وصول صادر.
تنقيح PII
المعلومات الشخصية (الأسماء وأرقام IBAN والعناوين البريدية) تُنقّح تلقائيًا في مخرجات CLI ووضع البث. مفعّل افتراضيًا.
- CLI: الحقول الحساسة تظهر كـ
***REDACTED*** - البث:
parse_streaming(redact_pii=True)(افتراضي) - الصادرات: CSV/JSON/Excel تحتفظ بالبيانات الكاملة للمعالجة اللاحقة
- تفعيل العرض: استخدم
--show-piiأوredact_pii=Falseعند الحاجة لإخراج غير منقّح
أمان XML (حماية XXE)
جميع عمليات تحليل XML تستخدم lxml بإعدادات مُقوّاة:
resolve_entities=False— يمنع هجمات توسيع كيانات XMLno_network=True— يحظر جميع الوصول الصادر من المحللload_dtd=False— يمنع الهجمات المعتمدة على DTD- تجريد مساحة الاسم قبل المعالجة — يتعامل مع أي متغير CAMT.053 بأمان
أمان أرشيف ZIP
iter_secure_xml_entries() يتحقق من كل عضو ZIP قبل الاستخراج:
- سقف حجم الإدخال: 10 ميغابايت لكل إدخال (قابل للتعديل)
- سقف الحجم الإجمالي: 50 ميغابايت إجمالي غير مضغوط (قابل للتعديل)
- حد نسبة الضغط: 100:1 افتراضيًا — يكتشف ZIP bombs
- رفض المدخلات المشفرة: تُتخطى المدخلات المشفرة مع تحذير
- بدون كتابة على القرص: بايتات XML تمر مباشرة إلى المحلل عبر
from_bytes()
منع اجتياز المسار
التحقق من المدخلات يحظر مسارات الملفات الخطرة:
- بايتات فارغة وأنماط اجتياز الدليل (
../) والروابط الرمزية تُرفض - التحقق من امتداد الملف مقابل التنسيقات المتوقعة
- حدود حجم الملف (100 ميغابايت افتراضيًا، قابلة للتعديل)
التحقق من الرصيد (القاعدة الذهبية)
كل استخراج PDF يُتحقق منه بالمعادلة: opening balance + credits − debits == closing balance. النتائج تُصنّف كـ VERIFIED أو DISCREPANCY أو FAILED. يمكن مراجعة التناقضات تفاعليًا بـ --type review.
المخرجات الحتمية
للتنسيقات المنظمة (CAMT، PAIN.001، CSV، OFX، QFX، MT940)، بنفس ملف الإدخال ينتج المحلل مخرجات متطابقة بالبايت كل مرة. لا عشوائية، لا استدلال نموذجي، لا أخذ عينات. هذا حاسم لـ:
- ��عادة إنتاج التدقيق: شغّل نفس الملف مرتين وقارن المخرجات
- الامتثال التنظيمي: إثبات معالجة متسقة
- ��لتحقق في CI: 718 اختبارًا يفرض الحتمية بتغطية فرعية 100%
أمان سلسلة التوريد
- تبعيات مقفلة بـ SHA-256 hash: كل حزمة في
poetry.lockلها hash ملفات موثّقة - CycloneDX SBOM: كل إصدار يتضمن قائمة مواد البرنامج
- مصدر بناء GitHub: الشهادة تربط كل مخرج بـ commit مصدره
- Commits موقعة: جميع الـ commits موقعة بـ SSH ومُتحقق منها في CI
- التحقق من التبعيات:
scripts/verify_locked_hashes.pyيتحقق من جميع الـ hash محليًا
التحقق محليًا
python -m pytest # 718 tests, 100% branch coverage
python scripts/verify_locked_hashes.py # SHA-256 hash verification
git log --show-signature -1 # Verify commit signature