أمان Base64: ما الذي يحميه الترميز وما الذي لا يحميه

ميّز الترميز القابل للعكس عن التشفير والتوقيعات والتحقّق من الصحة، وتعامل مع المستندات بعد فك ترميزها دون تنفيذ محتواها.

لا يوفّر Base64 السرّية. يستطيع أي شخص يتلقّى القيمة المرمّزة استعادة بايتاتها دون كلمة مرور أو مفتاح. إخفاء بيانات الاعتماد داخل سلسلة طويلة يغيّر مظهرها، ولا يغيّر من يستطيع قراءتها. طبّق على البيانات السرّية المرمّزة قواعد التعامل نفسها التي تطبّقها على أصولها.

الترميز والتشفير والتوقيعات تؤدّي وظائف مختلفة

يحدّد الترميز كيفية نقل البايتات عبر نظام مخصّص للنص. أما التشفير فيحمي السرّية باستخدام مفتاح تشفيري. ويمكن لوسم المصادقة أو التوقيع الرقمي إثبات أن البيانات صدرت عن جهة مخوّلة ولم تُعدّل، بشرط صحة المفاتيح وعملية التحقّق. ويساعد المجموع الاختباري البسيط أساساً في كشف التلف غير المقصود. لا يوفّر Base64 وحده أياً من هذه الضمانات.

يمثّل JWT بعد فك ترميزه مثالاً مفيداً. فرأسه وحمولته بنيتان قابلتان للقراءة، لكن قراءتهما لا تتحقّق من التوقيع أو المُصدر أو الجهة المستهدفة أو سياسة انتهاء الصلاحية. تعامل مع أي ادّعاء لم يُتحقّق منه كمدخل غير موثوق به. ولا تجعل عرض JSON المنسّق أساساً لقرار منح الصلاحيات.

أبقِ المحتوى الناتج عن فك الترميز غير قابل للتنفيذ

قد ينتج عن فك ترميز الحمولة HTML أو JavaScript أو SVG يحتوي على محتوى نشط أو مستند غير سليم البنية. اعرض النص باستخدام textContent، وليس innerHTML. لا تشغّل الشيفرة الناتجة عن فك الترميز، ولا تُدرج SVG غير موثوق به في صفحتك. يحدّد المرسِل نوع MIME المعلن في Data URI، وقد يكون غير صحيح. تساعد تواقيع الملفات في تحديد التنسيق المحتمل، لكن تطابق الرأس لا يثبت اكتمال الملف أو سلامته.

// decodedText comes from an untrusted payload.
const output = document.createElement('pre');
output.textContent = decodedText;
document.body.append(output); // displays markup as text

قم بتعيين الحدود قبل تخصيص الذاكرة

يزيد التمثيل النصي المرمّز حجم البيانات، وقد يحتفظ المتصفح بسلسلة الإدخال والبايتات الناتجة عن فك الترميز والمعاينة في الوقت نفسه. طبّق حدود الحجم قبل فك الترميز، وقيّد أنواع المستندات المقبولة، واسمح للمستخدمين بإلغاء العمليات الطويلة. ينبغي أن تنتج عن المدخلات غير السليمة حالة خطأ منفصلة، بدلاً من ناتج يمكن نسخه كما لو كان بيانات صحيحة.

عند التعامل مع بيانات حسّاسة، افحص اتصالات الأداة وسياسة الاحتفاظ بالبيانات. تختلف حدود المعالجة داخل المتصفح عن حدود معالجة API على الخادم. تجنّب وضع الرموز في عناوين URL للصفحات، لأنها قد تُحفظ في سجل المتصفح أو لقطات الشاشة أو سجلات الوصول. استخدم في الاختبارات بيانات اصطناعية ذات البنية نفسها. RFC 4648 يناقش غموض الترميز؛ لا يزال أمان البروتوكول الأكبر يعتمد على تصميمه الكامل.