أدوات المطور · التشفير ووحدة فك التشفير Base64
كيف يتم إنشاء رأس المصادقة الأساسية HTTP وفك تشفيرها باستخدام Base64
· كيف يعمل
base64 حماية
التفويض: الرأس الأساسي هو مجرد اسم المستخدم: كلمة المرور التي يتم تشغيلها من خلال Base64. يوضح هذا المنشور كيفية إنشاء القيمة، وكيفية فك تشفيرها من سجل الطلبات، ولماذا لا يخفي التشفير أي شيء.
401 الذي يستمر على الرغم من أن بيانات الاعتماد صحيحة - وهي قيمة رأس يتم فك ترميزها إلى سلسلة خاطئة بمهارة
يُرجع HTTP API 401 غير مصرح به ويتوقع تفويضًا: الرأس الأساسي. القيمة هي كلمة النظام Basic ومسافة واحدة وسلسلة Base64. تعمل البادئة المفقودة أو البادئة المشفرة أو السطر الجديد غير الملحوظ على تغيير ما يتلقاه الخادم حتى عندما يبدو اسم المستخدم وكلمة المرور المرئيين صحيحين.
قم بفك تشفير هذه السلسلة وستقرأ اسم المستخدم: كلمة المرور (حرفيًا بين نقطتين). بايتات اسم المستخدم: كلمة المرور هي UTF-8 مشفرة ثم مشفرة Base64، مما ينتج عنه قيمة رأس. إذا كانت بيانات الاعتماد admin:s3cret، UTF-8 بايت هي 0x61 0x64 0x6D 0x69 0x6E 0x3A 0x73 0x33 0x63 0x72 0x65 0x74 (ASCII أحرف بالإضافة إلى النقطتين)، ينتج ترميز Base64 YWRtaW46czNjcmV0، والرأس هو التفويض: YWRtaW46czNjcmV0 الأساسي.
الوصفة من RFC 7617: 'user:pass'، UTF-8، Base64 - الخطوات الدقيقة ودور النقطتين
اكتمل هذا HTTP نظام المصادقة الأساسي المحدد في RFC 7617. إنه بسيط وموحد ولا يوفر أي أمان في حد ذاته: يمكن لأي شخص يقرأ الرأس فك تشفيره على الفور لقراءة كلمة المرور. ولهذا السبب فإن HTTPS إلزامي للمصادقة الأساسية. التشفير هو شرط النقل، وليس ميزة الأمان. تنتقل كلمة المرور بمقدار UTF-8 بايت، مثل أي بيانات أخرى؛ Base64 هو مجرد تدوين مستخدم في بروتوكول HTTP.
إذا كنت بحاجة إلى فك تشفير الرأس الأساسي من سجل الشبكة، فستكون العملية واضحة ومباشرة: قم بفك تشفير Base64 والباقي، وسيكون لديك اسم المستخدم: كلمة المرور. النقطتان هي الفاصل بين اسم المستخدم وكلمة المرور. RFC 7617 يحدد أن بيانات الاعتماد هي معرف المستخدم: كلمة المرور، والنقطتين الأولين عبارة عن فاصل. إذا كانت كلمة المرور تحتوي على نقطتين، فإن النقطتين الثانيتين هما مجرد حرف آخر في كلمة المرور. القولون هيكلي لأن المتلقي يحتاج إلى حد واحد لا لبس فيه. يبحث عن النقطتين الأولى بعد فك التشفير؛ كل شيء قبله يحدد هوية المستخدم وكل شيء بعده هو كلمة المرور. وبالتالي، تشير النقطتان المفقودتان إلى وجود زوج بيانات اعتماد مشوه، وليس مشكلة أبجدية Base64.
مثال عملي: تشفير admin:s3cret وفك تشفير رأس من سجل - كلا الاتجاهين، بما في ذلك خطأ السطر الجديد اللاحق
إذا كان اسم المستخدم هو admin وكلمة المرور هي pass:word، فإن بيانات الاعتماد هي admin:pass:word، والتي يتم ترميزها إلى YWRtaW46cGFzczp3b3Jk. عند فك التشفير، يجب التقسيم على النقطتين الأولتين فقط، مع إعطاء اسم المستخدم admin وكلمة المرور pass:word. سيؤدي التقسيم على كل نقطتين إلى تقسيم كلمة المرور بشكل غير صحيح. معلمة مجموعة الأحرف في RFC 7617 تكون بيانات الاعتماد UTF-8 مشفرة. وهذا يعني أن الأحرف غير ASCII في أسماء المستخدمين أو كلمات المرور يتم تحويلها إلى UTF-8 بايت قبل تشفير Base64.
إذا كان اسم المستخدم هو مقهى (مع علامة e)، UTF-8 فإن البايتات هي 0x63 0x61 0x66 0xC3 0xA9 (أربعة بايتات للأحرف ASCII بالإضافة إلى اثنتين للأحرف المحركة)، وبيانات الاعتماد الكاملة Cafe: تحتوي كلمة المرور على بايتات للمقهى، ثم نقطتين بايت 0x3A، ثم كلمة المرور. يقوم إخراج Base64 بتشفير كافة البايتات بأمانة. يجب أن يعرف برنامج فك التشفير كيفية تفسير وحدات البايت التي تم فك تشفيرها كنص UTF-8، وليس اللاتينية 1.
كلمات المرور التي تحتوي على نقطتين ومسافات وغير ASCII — سبب تقسيم النقطتين الأولى والغرض من معلمة مجموعة الأحرف
مثال عملي: ابدأ بـ admin:s3cret. التحويل إلى UTF-8 بايت: a=0x61, d=0x64, m=0x6D, i=0x69, n=0x6E, :=0x3A, s=0x73, 3=0x33, c=0x63, r=0x72, e=0x65, t=0x74. بالنظام العشري: (97، 100، 109، 105، 110، 58، 115، 51، 99، 114، 101، 116). يقوم Base64 بتشفير 12 bytes: المجموعة إلى أربع مجموعات من ثلاثة (إنتاج أربع مجموعات من أربعة أحرف Base64).
القيمة المشفرة هي YWRtaW46czNjcmV0. رأس التفويض هو التفويض: Basic YWRtaW46czNjcmV0. يمكن أن يحتوي جانب كلمة المرور على نقطتين آخرتين دون تحريك الحد الأول. تظل المسافات والنصوص غير ASCII أيضًا موجودة عندما يتفق الطرفان على ترميز النص. يمكن لـ ToolAcre التحقق من UTF-8 بايت التي يصدرها، ولكن الخادم الأقدم الذي يتوقع مجموعة أحرف مختلفة يظل يمثل مشكلة إمكانية التشغيل البيني خارج تحويل Base64.
لماذا لا يكون هذا آمنًا بدون TLS — يُظهر فك التشفير كلمة المرور لأي شخص يرى الرأس
لفك تشفير الرأس المستلم، قم بفك تشفير Base64 لفك تشفير الرأس المستلم YWRtaW46czNjcmV0 لاستعادة البايتات، وتفسيره كنص UTF-8 للحصول على admin:s3cret، وتقسيمه على النقطتين الأولتين لاستخراج اسم المستخدم وكلمة المرور. من الأخطاء الشائعة تتبع السطر الجديد من الصدى. إذا قمت بتشغيل echo admin:s3cret | base64 في Unix Shell، يضيف الصدى سطرًا جديدًا افتراضيًا، لذا قم بتشفير admin:s3cret بالسطر الجديد (13 bytes بدلاً من 12).
يختلف إخراج Base64: YWRtaW46czNjcmV0Cg== (الحشو والأحرف الإضافية). سوف يفشل رأس التفويض الذي يحتوي على هذه القيمة لأن كلمة المرور تتضمن حرف السطر الجديد. الإصلاح هو استخدام الصدى -n أو التوجيه عبر printf أو الأداة التي لا تُلحق أسطرًا جديدة. يتجنب برنامج التشفير ووحدة فك التشفير Base64 هذا الأمر: فهو يقوم بتشفير ما تلصقه بالضبط، ولا توجد أسطر جديدة مخفية. TLS يغير تهديد النقل، وليس تنسيق بيانات الاعتماد. داخل الاتصال المحمي، يتم تشفير الرأس مع بقية الطلب؛ بمجرد أن يقوم البرنامج بتسجيلها أو عرضها، فإن قيمة Base64 تكشف مرة أخرى بيانات الاعتماد القابلة لإعادة الاستخدام لأي شخص قادر على فك تشفيرها. لا يزال التنقيح مهمًا في كل نقطة مراقبة.
الأخطاء الشائعة - سطر جديد من الصدى، وبادئة "أساسية" مفقودة، وترميز مزدوج للقيمة
خطأ آخر يفتقد البادئة الأساسية. قيمة رأس التفويض غير صالحة Base64 وحده؛ إنه اسم المخطط (أساسي أو حامل أو غيرهم) متبوعًا بمسافة ثم بيانات الاعتماد. تفشل بعض الأنظمة في التعرف على YWRtaW46czNjcmV0 كبيانات اعتماد ولكنها تنجح مع Basic YWRtaW46czNjcmV0. في حالة تصحيح أخطاء 401، تحقق مما إذا كان الخادم يقوم بتحليل رأس التفويض بشكل صحيح.
النظام غير حساس لحالة الأحرف في HTTP القياسي ولكن العديد من التطبيقات حساسة لحالة الأحرف؛ تحقق من وثائق API. الترميز المزدوج هو وضع فشل آخر. إذا كانت سلسلة تشفير Base64 مشفرة بالفعل بواسطة Base64، فسيكون الإخراج سلسلة مختلفة. يؤدي تشفير YWRtaW46czNjcmV0 إلى إنتاج WVdkbWFXNDZjek5qY3JldA== (مختلف تمامًا). قد تقوم بعض الأنظمة عن طريق الخطأ بتطبيق التشفير مرتين: مرة أثناء إعداد بيانات الاعتماد ومرة أخرى عند إنشاء الرأس. من السهل بشكل خاص تفويت السطر الجديد من أمر shell لأنه يمكن ترميزه كجزء من بيانات الاعتماد بدلاً من رفضه كمسافة بيضاء حول Base64. يتم فك تشفير الرأس الناتج بشكل نظيف إلى كلمة مرور تحتوي على بايت إضافي، مما ينتج عنه 401 الذي يبدو وكأنه فشل في المصادقة من جانب الخادم.
ما لا يغطيه هذا — مخططات الملخص والحامل، ومطالبات بيانات اعتماد المتصفح
تتوقع وحدة فك الترميز وجود طبقة واحدة من Base64، لذا يؤدي التشفير المزدوج إلى عدم التطابق. هذا هو السبب في أن تسجيل قيم بيانات الاعتماد في نموذج Base64 (وليس نصًا عاديًا) يمكن أن يكون مربكًا: إذا قام شخص ما بتطبيق فك التشفير مرة واحدة، فسيرى اسم المستخدم وكلمة المرور؛ إذا طبق مرتين، فإنهم يرون التشويش. تستخدم مصادقة الملخص (RFC 7616) ومصادقة الحامل (بالنسبة لرموز OAuth المميزة) أنظمة مختلفة، لكل منها تنسيقات بيانات اعتماد مختلفة.
يتطلب الملخص من الخادم إرسال nonce، والعميل لحساب التجزئة، والرأس لتضمين التجزئة بالإضافة إلى اسم المستخدم، وليس كلمة المرور. عادةً ما يكون الحامل هو JSON رمز الويب (JWT)، وهو Base64url مشفر ولكنه غير مسبوق باسم المستخدم. المصادقة الأساسية أبسط من كليهما ولكنها غير آمنة تمامًا بدون TLS لأن بيانات الاعتماد قابلة للقراءة في الرأس. يستخدم Digest وBearer نفس حقل رأس التفويض ولكنهما يعينان معنى مختلفًا تمامًا لقيمهما. تضيف مطالبات بيانات اعتماد المتصفح واجهة المستخدم وسلوك التخزين المؤقت أعلى الأساسي. تتوقف هذه المقالة عند إنشاء حمولة بيانات الاعتماد الأساسية وفحصها بدلاً من مقارنة أنظمة المصادقة تلك.
الوجبات الجاهزة: المصادقة الأساسية هي Base64، وليست الحماية - كيف يتيح لك برنامج التشفير ووحدة فك التشفير Base64 التحقق من قيمة الرأس محليًا دون إرسال بيانات الاعتماد إلى أي مكان
إذا كان API يدعم أنظمة مصادقة متعددة، فاختر الأكثر أمانًا. يمكن أن يساعد برنامج تشفير ووحدة فك ترميز Base64 في تصحيح أخطاء فشل المصادقة الأساسية: الصق سلسلة بيانات الاعتماد (اسم المستخدم والنقطتين وكلمة المرور)، وتنتج الأداة قيمة Base64 على الفور. قارن النتيجة بإرسال الرأس، وسيكون عدم التطابق مرئيًا. على العكس من ذلك، الصق قيمة الرأس من سجل الشبكة، وقم بإزالة البادئة الأساسية، وفك التشفير لمعرفة ما شاهده الخادم.
للتعلم، الصق admin:s3cret ولاحظ الإخراج، ثم قم بتعديل كلمة المرور لترى كيف يتغير Base64. إن فهم كيفية إنشاء الرأس يوضح لماذا يتطلب فك التشفير معرفة تنسيق RFC ولماذا تعتبر النقطتان عنصرًا بنيويًا، وليس Base64. يجب أن يستخدم الفحص المحلي بيانات اعتماد مخترعة، وليس كلمة مرور حية منسوخة من الإنتاج. قم بتشفير الزوج، وانقل الإخراج مرة أخرى إلى لوحة الإدخال، وقم بفك تشفيره. تثبت علامات الترقيم المطابقة والأحرف اللاحقة تمامًا التمثيل ذهابًا وإيابًا قبل إرسال الرأس إلى أي مكان.