يغيّر Base64URL حرفين من مجموعة الأحرف: يحوّل علامة الجمع (+) في Base64 القياسي إلى شرطة (-)، والشرطة المائلة (/) إلى شرطة سفلية (_). وتبقى المعلومات المرمّزة كما هي. يفيد هذا البديل عندما يعطي البروتوكول المحيط معنى خاصاً لعلامة الجمع أو الشرطة المائلة، لكنه لا يعفي القيمة من جميع قواعد عناوين URL أو التطبيق.
استخدم المتجه الذي يكشف الفرق
يتم ترميز وحدات البايت FB FF كـ +/8= في المعيار Base64 و -_8= في Base64URL. اختبار مثل Hello ينتج عنه أحرف أبجدية مشتركة فقط، لذلك لا يمكنه الكشف عما إذا كان التحويل الآمن URL يعمل أم لا.
const standard = btoa(String.fromCharCode(251, 255));
const urlSafe = standard.replace(/\+/g, '-').replace(/\//g, '_');
console.log(standard); // +/8=
console.log(urlSafe); // -_8=
الحشو هو اتفاق منفصل
تحذف تنسيقات كثيرة للرموز علامات يساوي (=) من النهاية، بينما تحتفظ بها أنظمة أخرى. تغيير مجموعة الأحرف وحذف الحشو خياران منفصلان. إذا كان باقي قسمة عدد أحرف الإدخال غير المحشو على 4 هو 2، فيلزم إضافة علامتَي يساوي للحصول على تمثيل محشو؛ وإذا كان الباقي 3، فتلزم علامة واحدة. أما إذا كان الباقي 1، فلا يمكن إصلاح الإدخال بإضافة الحشو وحده، لأن حرفاً واحداً يمثّل 6 بتات لا يكفي لتمثيل بايت كامل.
عند التحقّق من الصحة، افحص أيضاً البتات غير المستخدمة في الحرف الأخير. قد يقبل مفكّك الترميز الذي يتجاهلها سلاسل مختلفة تمثّل تسلسل البايتات نفسه. وقد يسبّب هذا الغموض مشكلة عندما يقارن التطبيق السلاسل المرمّزة بدلاً من البايتات الناتجة عن فك الترميز. ينبغي أن تنتج الجهة الملتزمة بالصيغة المعيارية تمثيلاً واحداً متّفقاً عليه.
لا تخلط بين تحليل الاستعلام وفك ترميز Base64
يفسّر تحليل الاستعلامات بنمط النماذج علامة الجمع (+) الحرفية على أنها مسافة. ولذلك قد تتلف قيمة Base64 قياسية أُلصقت في الاستعلام دون تهريبها، قبل أن تصل إلى مفكّك الترميز. أنشئ الاستعلام باستخدام URLSearchParamsأو استخدم المتغير Base64URL إذا كان بروتوكول الاستلام يحدده.
const query = new URLSearchParams({ payload: '+/8=' });
console.log(query.toString()); // payload=%2B%2F8%3D
console.log(query.get('payload')); // +/8=
لا تستبدل كل مسافة تلقائيًا بعلامة زائد: قد تكون المسافة تنسيقًا حقيقيًا أو دليلاً على خطأ آخر. الحفاظ على المصدر، وتحديد طبقة النقل التي غيرته، وتطبيق التصحيح المتعمد. بالنسبة لمقاطع JWT، استخدم قواعد Base64URL الخاصة بتنسيق الرمز المميز بدلاً من اختراع سياسة إصلاح عامة.
تم وصف الأبجديات القياسية وURL-الآمنة في RFC 4648. لا يزال التكامل الخاص بك يحتاج إلى خيارات واضحة للحشو وقبول المسافات البيضاء والحد الأقصى للطول.