
redact v0.2.2
مكتبة Go بدون تبعيات تزيل الأنماط الشبيهة ببيانات الاعتماد (مفاتيح API، ورموز JWT، وترويسات Authorization، ومعلومات مستخدم URL) قبل وصولها إلى السجلات/القياسات عن بُعد.
redact
أزل المحتوى الشبيه ببيانات الاعتماد من السلاسل النصية الحرّة قبل أن تصل إلى السجلات أو أنظمة القياس عن بُعد أو أي سطح تابع لجهة خارجية
جزء من مجموعة أدوات phpboyscout Go — وحدات Go صغيرة بلا أُطر عمل، مستخرجة من go-tool-base. التوثيق: redact.go.phpboyscout.uk
تُزيل gitlab.com/phpboyscout/go/redact المحتوى الشبيه ببيانات الاعتماد من السلاسل النصية الحرّة عند الحدود بين أسطح المراقبة الموثوقة وغير الموثوقة — مورّدي أنظمة القياس عن بُعد، ومجمّعي السجلات، ومخازن المقاييس. تحمل رسائل الأخطاء ووسائط الأوامر وقيم ترويسات HTTP أسرارًا بالصدفة بصورة روتينية (عنوان URL يتضمّن معلومات مستخدم مضمّنة، أو علَم --api-key=sk-… في os.Args، أو ترويسة Authorization مُقتبسة ضمن خطأ تصدير). مرّر هذه القيم عبر redact.String عند الخروج ولن تغادر العملية أبدًا بشكل صريح.
التصميم
- صفر اعتماديات. مكتبة قياسية نقية (
regexp,strings) — لا شيء سوى الوحدة نفسها يدخل إلى مخطط التبعيات لديك. يفرض اختبارdepfootprint_test.goهذا الأمر. - إخفاء عند الحدود. عَقّم البيانات عند مغادرتها المضيف، وليس في كل مكان.
- متحفّظ افتراضيًا. تتطلب قاعدة الاحتياط للرموز غير الشفافة ≥41 حرفًا حتى لا تُنتج أبدًا نتائج إيجابية خاطئة على UUIDs أو MD5 أو SHA-1.
التثبيت
go get gitlab.com/phpboyscout/go/redact
الاستخدام
import "gitlab.com/phpboyscout/go/redact"
safe := redact.String("failed calling https://user:[email protected]?api_key=sk-abc123…")
// → credentials in the URL userinfo, the api_key query param, and the sk- token are masked
msg := redact.Error(err) // redact.String applied to err.Error() (nil-safe)
if redact.IsSensitiveHeaderKey("Authorization") { /* … redact this header's value … */ }
يزيل redact.String معلومات مستخدم URL لأي مخطط (https://، postgres://، redis://، …)، وتعيينات بيانات الاعتماد بصيغة name=value، وحقول بيانات الاعتماد في JSON مثل "access_token" و"client_secret"، ورموز ترويسة Authorization، ورموز JWT، وبادئات المورّدين المعروفة (sk-، ghp_، glpat-، AIza، AKIA، Slack)، والرموز الطويلة غير الشفافة. يحدّد SensitiveHeaderKeys / IsSensitiveHeaderKey الترويسات التي يجب إخفاء قيمها.
القيود
لا تصل فهارس الأنماط أبدًا إلى نسبة استدعاء 100%، وهذا الفهرس متحفّظ عن قصد:
- لا يوجد إعداد. لا يمكنك إضافة نمط أو تعطيله أو إعادة ترتيبه — تصدّر الحزمة أربعة رموز فقط ولا شيء قابل للضبط. نَظّم الكود حولها بدلًا من ذلك.
- لا تُخفي
Stringقيم الترويسات العشوائية. إنها تعرفAuthorization:فقط ولا شيء غيره؛ فتمرّX-API-Key: …كما هي. لهذا وُجدت رموز الترويسات. - تتسرّب الأسرار المخصصة والقصيرة. تحتاج قاعدة الاحتياط الشاملة إلى 41 حرفًا، ولكل بادئة مورّد حدًّا أدنى صارمًا للطول.
- الأنماط تقتصر على ASCII فقط، والإخفاء أحادي الاتجاه — لا شيء يمكن عكسه ولا سجلّ لما تم استبداله.
يبيّن ما لا يفعله redact الحدود الكاملة.
التوثيق
أدلة شاملة ومرجع ونموذج تهديدات: redact.go.phpboyscout.uk. توثيق API مُولَّد وأمثلة قابلة للتشغيل: pkg.go.dev.
الترخيص
انظر LICENSE.