TL;DR: Bank Statement Parser সমস্ত ডেটা স্থানীয়ভাবে প্রক্রিয়া করে, ডিফল্টরূপে PII রিডাক্ট করে, XXE আক্রমণের বিরুদ্ধে XML পার্সিং শক্তিশালী করে, Ollama-র মাধ্যমে স্থানীয়ভাবে LLM চালায়, এবং SHA-256 hash-locked ডিপেন্ডেন্সি ও CycloneDX SBOM সহ আসে।
ডিজাইন অনুসারে নিরাপত্তা
Bank Statement Parser সংবেদনশীল আর্থিক ডেটা প্রক্রিয়াকরণের জন্য তৈরি। প্রতিটি ডিজাইন সিদ্ধান্ত নিরাপত্তা, গোপনীয়তা এবং অডিটযোগ্যতাকে অগ্রাধিকার দেয়।
শূন্য Cloud নির্ভরতা
সমস্ত প্রক্রিয়াকরণ আপনার runtime-এর মধ্যে স্থানীয়ভাবে ঘটে। নির্ধারক পার্সার শূন্য নেটওয়ার্ক কল করে। Hybrid PDF pipeline স্থানীয় LLM inference-এর জন্য Ollama ব্যবহার করে — কোনো ডেটা cloud API-তে পাঠানো হয় না। XML পার্সার স্পষ্টভাবে no_network=True, resolve_entities=False, এবং load_dtd=False দিয়ে কনফিগার করা যা যেকোনো আউটবাউন্ড অ্যাক্সেস প্রতিরোধ করে।
PII রিডাকশন
ব্যক্তিগতভাবে শনাক্তযোগ্য তথ্য (নাম, IBAN, ডাক ঠিকানা) CLI আউটপুট ও streaming মোডে স্বয়ংক্রিয়ভাবে রিডাক্ট হয়। এটি ডিফল্টরূপে চালু।
- CLI: সংবেদনশীল ক্ষেত্র
***REDACTED***হিসেবে দেখায় - Streaming:
parse_streaming(redact_pii=True)(ডিফল্ট) - Export: CSV/JSON/Excel ডাউনস্ট্রিম প্রক্রিয়াকরণের জন্য সম্পূর্ণ ডেটা রাখে
- Opt-in: অসংশোধিত আউটপুট প্রয়োজন হলে
--show-piiবাredact_pii=Falseব্যবহার করুন
XML নিরাপত্তা (XXE সুরক্ষা)
সমস্ত XML পার্সিং শক্তিশালী সেটিংস সহ lxml ব্যবহার করে:
resolve_entities=False-- XML entity expansion আক্রমণ প্রতিরোধ করেno_network=True-- পার্সার থেকে সমস্ত আউটবাউন্ড নেটওয়ার্ক অ্যাক্সেস ব্লক করেload_dtd=False-- DTD-ভিত্তিক আক্রমণ প্রতিরোধ করে- প্রক্রিয়াকরণের আগে namespace stripping -- যেকোনো CAMT.053 variant নিরাপদে পরিচালনা করে
ZIP আর্কাইভ নিরাপত্তা
iter_secure_xml_entries() extraction-এর আগে প্রতিটি ZIP member যাচাই করে:
- Entry size cap: প্রতি entry 10 MB (কনফিগারযোগ্য)
- Total size cap: 50 MB মোট uncompressed (কনফিগারযোগ্য)
- Compression ratio limit: 100:1 ডিফল্ট -- ZIP bomb শনাক্ত করে
- Encrypted entry rejection: Encrypted entry সতর্কতা সহ skip করা হয়
- কোনো disk write নেই: XML বাইট
from_bytes()-এর মাধ্যমে সরাসরি পার্সারে পাস হয়
Path Traversal প্রতিরোধ
Input validation বিপজ্জনক ফাইল path ব্লক করে:
- Null byte, directory traversal pattern (
../), এবং symlink প্রত্যাখ্যান করা হয় - প্রত্যাশিত ফর্ম্যাটের বিরুদ্ধে ফাইল extension validation
- ফাইল size limit (100 MB ডিফল্ট, কনফিগারযোগ্য)
Balance Verification (Golden Rule)
প্রতিটি PDF extraction এই সমীকরণ দিয়ে যাচাই করা হয়: opening balance + credits − debits == closing balance। ফলাফল VERIFIED, DISCREPANCY, বা FAILED হিসেবে ট্যাগ করা হয়। অসঙ্গতি --type review দিয়ে ইন্টারেক্টিভভাবে পর্যালোচনা করা যায়।
নির্ধারক আউটপুট
স্ট্রাকচার্ড ফর্ম্যাটের (CAMT, PAIN.001, CSV, OFX, QFX, MT940) জন্য, একই ইনপুট ফাইল দিলে পার্সার প্রতিটি রানে বাইট-অভিন্ন আউটপুট তৈরি করে। কোনো randomness, কোনো model inference, কোনো heuristic sampling নেই। এটি গুরুত্বপূর্ণ:
- অডিট পুনরুত্পাদনযোগ্যতা: একই ফাইল দুবার চালান এবং আউটপুট diff করুন
- নিয়ন্ত্রক কমপ্লায়েন্স: সামঞ্জস্যপূর্ণ প্রক্রিয়াকরণ প্রদর্শন করুন
- CI verification: 718 টেস্ট 100% branch coverage সহ নির্ধারকতা প্রয়োগ করে
Supply Chain Security
- SHA-256 hash-locked ডিপেন্ডেন্সি:
poetry.lock-এ প্রতিটি প্যাকেজের verified file hash আছে - CycloneDX SBOM: প্রতিটি রিলিজে Software Bill of Materials অন্তর্ভুক্ত
- GitHub build provenance: Attestation প্রতিটি artifact তার source commit-এ সংযুক্ত করে
- Signed commits: সমস্ত commit SSH-signed এবং CI-তে verified
- Dependency verification:
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