
عرض تعليمي لثغرة تزوير طلب الخادم (SSRF) في Next.js (CVE-2024-34351)، مع أمثلة خطوة بخطوة للاستغلال والتخفيف.
يمكن استخدام هذا المستودع كدعم لتقديم لقاء أو أكثر. المسار هو كما يلي...
يعتمد هذا العمل بشكل أساسي على مصدرين:
1-csr-load-data vanilla react SPA loading data[!IMPORTANT] CSR (Client-Side Rendering): يتم تسليم كود React إلى المتصفح، الذي يقوم بإنشاء المحتوى الذي يتم إدراجه في DOM.

cd 1-csr-load-data
npm start

2-csr-router vanilla react SPA routing[!IMPORTANT] بعد تحميل الصفحة لأول مرة، يستخدم التنقل إلى صفحات أخرى على نفس موقع الويب JavaScript لإعادة عرض أجزاء من الصفحة دون الحاجة إلى تحديث كامل للصفحة.
cd 2-csr-router
npm start

3-rsc-load-data React Server Components (Next.js impl) loading data[!IMPORTANT] مكونات React التي تمت كتابتها ليتم تشغيلها فقط على الخادم، وليس في المتصفح.

cd 3-rsc-load-data
npm run build
npm run start

4-rsc-router React Server Components (Next.js impl) routing[!IMPORTANT] يتم تنفيذ المكونات فقط على الخادم. السلوك الافتراضي هو التقديم الثابت: يتم تنفيذ المكونات في وقت البناء.
cd 4-rsc-router
npm run build
npm run start

5-SSR SSR Server Side Rendering[!IMPORTANT] يعني SSR تقديم مكونات العميل مسبقًا على الخادم. يتم تشغيل كود React في الوقت الذي يتم طلبه. قد يتم تخزين النتيجة مؤقتًا للطلبات المستقبلية.
أفضل ممارسة: تعريف مكونات 'use client'; في أدنى مستوى ممكن في شجرة المكونات.
[!IMPORTANT] "في React، "hydration" هي كيفية "ربط" React بـ HTML الموجود الذي تم تقديمه بالفعل بواسطة React في بيئة خادم. أثناء hydration، سيحاول React إرفاق مستمعي الأحداث بالعلامات الموجودة وتولي تقديم التطبيق على العميل. في التطبيقات المبنية بالكامل مع React، عادةً ما تقوم بـ "hydration" لجذر واحد فقط، مرة واحدة عند بدء التشغيل للتطبيق بأكمله."
https://react.dev/reference/react-dom/client/hydrateRoot
https://www.gatsbyjs.com/docs/conceptual/partial-hydration/
cd 5-ssr
npm run build
npm run start

6-pages-router-ssg (Next.js impl)[!IMPORTANT] SSG (Static Site Generation) باستخدام موجه الصفحات: يتم تشغيل كود React عند بناء تطبيقك، ويكون الناتج المُنشأ ثابتًا.
cd 6-pages-router-ssg
npm run build
npm run start
7-pages-router-isr (Next.js impl)[!IMPORTANT] ISR (باستخدام موجه الصفحات): "يسمح لك Next.js بإنشاء أو تحديث صفحات ثابتة بعد بناء موقعك. يمكنك Incremental Static Regeneration (ISR) من استخدام التوليد الثابت على أساس كل صفحة، دون الحاجة إلى إعادة بناء الموقع بأكمله. مع ISR، يمكنك الاحتفاظ بفوائد الثبات مع التوسع إلى ملايين الصفحات."
cd 7-pages-router-isr
npm run build
npm run start
"قد تصبح البيانات قديمة عند وقت الطلب"
https://vercel.com/blog/nextjs-server-side-rendering-vs-static-generation
https://react.dev/reference/rsc/server-actions
...
8-ssrf-14.1.0https://www.assetnote.io/resources/research/digging-for-ssrf-in-nextjs-apps
14.1.1redirect(/blog/${inputValue});المصدر: https://www.assetnote.io/resources/research/digging-for-ssrf-in-nextjs-apps