العربية

أدوات المطور · URL التشفير وفك التشفير

تشفير إعادة التوجيه URL داخل معلمة استعلام دون كسرها

· كيف يعمل

ترميز URL معلمات الاستعلام حماية oauth

URL كاملة مشفرة كقيمة معلمة استعلام واحدة، مع الحفاظ على البنية من خلال ترميز النسبة المئوية
الرسم التوضيحي المتجه الأصلي ToolAcre

يعد تداخل URL داخل الآخر هو المكان الأكثر شيوعًا الذي يحدث فيه خطأ في ترميز النسبة المئوية. يوضح هذا المنشور لماذا يجب ترميز URL الداخلي؟، & و =، وكيفية القيام بذلك، وكيفية التحقق من النتيجة.

رابط العودة إلى الذي أسقط نصف معلماته - URL الداخلي وابتلعته سلسلة الاستعلام الخارجية

إن رابط العودة إلى الذي أسقط نصف معلماته هو نمط تصحيح الأخطاء الذي يواجهه كل مطور. يقوم المستخدم بتسجيل الدخول، ويحاول التطبيق إعادة التوجيه إلى ?next=https://example.com/page?id=1&user=alice, وينتهي الأمر في example.com/page?id=1. تم تحليل علامة الضم الموجودة في URL الداخلي كفاصل بين معلمات الاستعلام الخارجية. عنوانا URL بمحددات مختلفة يعني أنه يجب تشفير العنوان الداخلي.

عند تداخل عنوان URL داخل عنوان آخر كمعلمة استعلام، يصبح هذا العنوان الداخلي بيانات غير شفافة للطبقة الخارجية. يجب ألا تكون علامة الاستفهام وعلامة العطف وعلامة يساوي قابلة للقراءة كمحددات هيكلية. ترميز النسبة المئوية يحولهم: ؟ يصبح %3F، ويصبح %26، = يصبح %3D. ثم يعامل المحلل اللغوي الخارجي السلسلة المشفرة كقيمة معلمة واحدة.

عنوانا URL ومجموعتان من المحددات - لماذا يعتبر URL الداخلي مجرد قيمة للرقم الخارجي

ينتج encodeURIComponent الموجود على الجزء الداخلي الكامل URL حماية كاملة: يُرجع encodeURIComponent("https://example.com/a?b=1&c=2")" "https%3A%2F%2Fexample.com%2Fa%3Fb%3D1%26c%3D2". يصبح كل حرف بنيوي %XX لذا لا يمكن للمحلل الخارجي إساءة تفسير المحددات المتداخلة الخطوط المائلة وعلامات الاستفهام دون تغيير، مما يعيد تقديم الغموض عندما تصبح هذه النتيجة قيمة استعلام.

يقوم الخادم بفك التشفير مرة واحدة بالضبط. بعد استخراج المعلمة التالية، يؤدي استدعاء decodeURIComponent واحد إلى استعادة URL الداخلي إلى شكله الأصلي. يؤدي تحليل النتيجة كسلسلة استعلام جديدة إلى رؤية بنية المعلمة الصحيحة. يعد فك التشفير المزدوج خطرًا عندما تمر نفس القيمة عبر طبقات متعددة؛ %26 يصبح & بعد فك تشفير واحد ويبقى & بعد الثاني.

encodeURIComponent على الجزء الداخلي بالكامل URL - ما الذي يتم تشفيره، بما في ذلك :، / و؟

القاعدة الأساسية بسيطة: أي حرف له معنى في بناء الجملة URL، بما في ذلك : / ? = & #، يجب أن يتم ترميزه بنسبة مئوية عندما يظهر في قيمة معلمة استعلام. يضمن ذلك أن يرى المحلل اللغوي فقط بنية المعلمة التي قصدتها وليس أي محددات عرضية مخفية داخل القيمة التي تقوم بتمريرها. استخدم encodeURIComponent للتعامل مع هذا التشفير بشكل كامل وموثوق.

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

مثال عملي: إنشاء ?next=https://example.com/a?b=1&c=2 بشكل صحيح — السلسلة المشفرة وفك التشفير على جانب الخادم

توجد حدود أمنية مهمة بجانب التشفير. يجب أن يتحقق الخادم من أن الوجهة التي تم فك تشفيرها آمنة بالفعل لإعادة التوجيه إليها. الترميز المئوي يجعل بنية URL لا لبس فيها؛ لا يجعل عناوين URL التعسفية آمنة. تحدث ثغرات إعادة التوجيه المفتوحة عندما تتبع التطبيقات بشكل أعمى عناوين URL التي يقدمها المستخدم. يتطلب التحقق قائمة مسموح بها صريحة أو التحقق من النطاق أو تأكيد المستخدم.

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

خطر إعادة التوجيه المفتوح - لماذا يجب على الخادم التحقق من صحة الوجهة التي تم فك تشفيرها، وليس مجرد فك تشفيرها

الأخطاء الشائعة تتراكم هنا. يقوم المطورون أحيانًا بتشفير جزء الاستعلام فقط، مع ترك الخطوط المائلة دون تغيير، مما يؤدي إلى كسر البنية. يقوم البعض الآخر بتشفير المعلمة التي تم إنشاؤها بالكامل بما في ذلك ?next=، مما يؤدي إلى إنشاء ترميز مزدوج. يقوم البعض بالتحقق من الصلاحية عن طريق التحليل دون فك التشفير، مما يؤدي إلى إساءة قراءة البنية المشفرة. يضمن البناء باستخدام encodeURIComponent الاتساق والصحة في كل حالة.

هناك خطأ شائع آخر وهو الثقة في المتصفح لإصلاح المعلمة المشوهة تلقائيًا. عناوين URL هي بيانات ويجب التعامل معها على وجه التحديد كبيانات. encodeURIComponent هي الأداة القياسية لهذه المهمة. يحافظ برنامج التشفير ووحدة فك التشفير URL على هذه العملية محليًا حتى تتمكن من التحقق من وحدات البايت الدقيقة قبل الشحن إلى الإنتاج.

الأخطاء الشائعة — تشفير جزء الاستعلام فقط، أو الثقة في المتصفح لإصلاحه

تتبع معلمات OAuth redirect_uri نفس النمط تمامًا. يقوم خادم التفويض بتمرير التحكم إلى العميل على عنوان معروف، وغالبًا ما يكون URL كاملاً بمعلمات متعددة. ويضمن تشفيرها كقيمة واحدة بقاء المعلمات على قيد الحياة أثناء النقل، ويقوم العميل بفك تشفيرها مرة واحدة قبل الاستخدام. يؤدي التشفير غير المعالج في تدفقات OAuth إلى اختفاء الرموز المميزة ومعلمات رد الاتصال في منتصف الإرسال.

تستخدم معلمات الحالة في OAuth التشفير المدمج مع التوقيعات المشفرة لحماية CSRF. تبقى معرفات الأجزاء على جانب العميل ولا تنتقل أبدًا إلى الخادم. لا يجب أبدًا وضع الرموز المميزة لحاملها في عناوين URL لإعادة التوجيه بغض النظر عن التشفير، لأن عناوين URL تظهر في السجلات وسجل المتصفح ورؤوس الإحالة.

ما لا يغطيه هذا — معلمات حالة OAuth وتصميم الحماية CSRF

استراتيجية الاختبار: قم ببناء URL الداخلي الخاص بك باستخدام معلمات حقيقية، وترميزها كقيمة خارجية، وفك تشفيرها في تلقي التعليمات البرمجية. تحقق من أن النتيجة التي تم فك تشفيرها مطابقة للنتيجة الأصلية بمقدار بايت مقابل بايت. استخدم برنامج التشفير ووحدة فك التشفير URL قبل نشر الإنتاج. افحص حركة مرور الشبكة وسجلاتها للتأكد من الوصول الصحيح وعدم اقتطاع البيانات المشفرة أو تشويهها.

خطأ مطبعي مثل %2e بدلاً من %2E قد يتم فك تشفيره بشكل صحيح ولكنه يفشل في عمليات التحقق ذهابًا وإيابًا في الأنظمة الثانوية التي تتوقع الاتساق. يعد عدم تطابق التشفير بين المكتبات عبر الأنظمة الأساسية المختلفة أمرًا نادرًا ولكنه ممكن؛ اختبار الرحلة الكاملة ذهابًا وإيابًا يمسك بهم قبل أن يتسببوا في مشكلات الإنتاج وشكاوى العملاء.

الوجبات الجاهزة: تعامل مع URL الداخلي كبيانات - كيف يقوم وضع القيمة الفردية لجهاز التشفير ووحدة فك التشفير URL بتشفيرها بالكامل ويؤكد جهاز فك التشفير الخاص به الرحلة ذهابًا وإيابًا

حدود التشفير واضحة: يعامل encodeURIComponent مدخلاتك كبيانات غير شفافة ويهرب من كل حرف باستثناء علامات الترقيم غير المحفوظة، مما يجعل من الآمن التداخل في أي طبقة URL. حدود التحقق منفصلة: بعد فك التشفير، تحقق من أن الوجهة هي المكان الذي ينوي المستخدم الذهاب إليه. استخدم برنامج التشفير ووحدة فك التشفير URL لمشاهدة عرض التشفير الشامل.

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