تبدو كتابة أداة لتنقيح البيانات الشخصية مهمة لا تستغرق سوى 20 دقيقة. وهنا يكمن الفخ.
احتجت في بيئة الإنتاج إلى أمرين غير لافتين: تنقيح المعلومات الشخصية من النص الحر قبل مغادرته نظامنا، وتشفير بضعة حقول للهوية عند التخزين. من السهل تركيب حل سريع لكليهما، لكن كليهما يوقعك لاحقًا في مشكلات خفية.

غالبًا ما تُفرط تعابير التنقيح النمطية التي يكتبها الناس في المطابقة؛ فتحوّل رقم طلب أو مبلغ دفعة إلى [redacted] من دون أن تلاحظ ذلك حتى يكتشفه أحد العملاء. أما حلول تشفير الحقول المطوّرة داخليًا، فعادةً ما تخفي إعادة استخدام IV أو استعمال دالة تجزئة سريعة بدلًا من دالة لاشتقاق المفاتيح، لينتهي بك الأمر بتشفير يبدو آمنًا فحسب.
كنت قد حللت هاتين المشكلتين بالفعل داخل مشروع حقيقي، فاستخرجت الكود وجرّدته من كل ما يخص التطبيق، ثم نشرته مفتوح المصدر.
توفّر pii-toolkit-cy الدالة redact() للبريد الإلكتروني وبطاقات الدفع وأرقام IBAN وأرقام الهاتف، وهي مضبوطة كي لا تنقّح الأعداد الصحيحة المجرّدة مثل أرقام الطلبات. وتوفّر createPiiCipher() باستخدام AES-256-GCM، مع IV جديد لكل قيمة، واشتقاق المفاتيح عبر scrypt، وكشف التلاعب عند فك التشفير. ولا تتطلب أي اعتماديات وقت التشغيل، وتدعم ESM، وتتضمن أنواع TypeScript.
أبقيت المكتبة صغيرة عمدًا. فقد خرجت من حاجة حقيقية، لا من مستودع تعليمي.