هل ما زلت تستخدم Node.js 20؟ التحديث الأمني في 11 نوفمبر لن يحميك

وصل إصدار Node.js 20 إلى نهاية دورة حياته في 30 أبريل 2026، ولن يشمله التحديث الأمني الصادر في 11 نوفمبر. تعرّف على التحديثات التي فاتته، وما إذا كان الأنسب الانتقال إلى الإصدار 24 أم 26، وما قد يتعطل من وظائف، والخيارات المتاحة أمامك إن لم تتمكن من الترقية خلال هذا الأسبوع.

Ashley Innocent

Ashley Innocent

5 نوفمبر 2026

هل ما زلت تستخدم Node.js 20؟ التحديث الأمني في 11 نوفمبر لن يحميك

Apidog للمؤسسات

النشر على الخوادم المحلية

SSO و RBAC

متوافق مع SOC 2

استكشف Apidog للمؤسسات

لن يحصل Node.js 20 على أي تحديثات في 11 نوفمبر 2026؛ فالإصدارات الأمنية تقتصر فقط على 26.x و24.x و22.x، نظرًا لأن Node.js 20 وصل إلى نهاية عمره التشغيلي (End-of-Life) في 30 أبريل 2026. وكان آخر تحديث أمني تلقيته هو 20.20.2، والذي صدر في 24 مارس. ومنذ ذلك الحين، صدرت 33 ثغرة أمنية (CVE) دون توفير أي إصدار فرعي لـ 20.x. بادر بالترقية إلى الإصدار 24 أو 26 هذا الأسبوع.

وردت هذه الثغرات ضمن ثلاثة إصدارات أمنية استثنت الإصدار 20 تمامًا. ولم يتبقَّ سوى أيام قليلة على الإصدار الرابع، حيث يُصنّف الإعلان المسبق أخطر مشكلة فيه بأنها «عالية الخطورة» (HIGH) في جميع الإصدارات المدعومة.

ما الذي سيحدث في 11 نوفمبر، ولماذا تم استبعاد Node.js 20؟

سيُطلق مشروع Node.js إصدارات جديدة من 26.x و24.x و22.x يوم الأربعاء 11 نوفمبر 2026 أو بعده بفترة وجيزة. لا تزال تفاصيل ثغرات CVE غير معلنة حاليًا، وستظل سرية حتى إتاحة الإصدارات رسميًا. يُغطي دليلنا التنازلي لإصدار نوفمبر جرد بيئات التشغيل وأوامر يوم التحديث، لذا لن نتطرق إليها في هذا المقال.

لا يتواجد Node.js 20 ضمن هذه القائمة لأن المشروع توقف عن دعمه وصيانته. وتوضح صفحة نهاية العمر التشغيلي (End-of-Life) ذلك بصراحة تامة: عندما تكشف الإصدارات الأمنية الجديدة عن مشكلات، «حتى لو كانت الثغرة الأمنية نفسها تؤثر على خطوط الإصدارات التي انتهى دعمها، فلن تصدر أي تحديثات جديدة لها».

ويضيف الإشعار جملة أخرى بالغة الأهمية بالنسبة لك: «تتأثر الإصدارات المنتهية الصلاحية دائمًا عند صدور أي إصدار أمني جديد».

ما فات Node.js 20 بالفعل

صدرت ثلاثة تحديثات أمنية منذ انتهاء دعم الإصدار 20، ولم يتضمن أي منها تحديثًا لـ 20.x.

الإشعار الأمني ثغرات CVE عالية متوسطة منخفضة تم إصلاحها في
18 يونيو 2026 12 2 6 4 26.3.1, 24.17.0, 22.23.0
29 يوليو 2026 11 3 5 3 26.5.1, 24.18.1, 22.23.2
21 أكتوبر 2026 10 4 3 3 26.12.1, 24.22.1, 22.23.4
الإجمالي 33 9 14 10 لا يوجد إصدار لـ 20.x

التعليمات البرمجية التي تمسّها هذه الإصلاحات هي صلب ما يُشغّله خادم واجهة برمجة التطبيقات (API) طوال الوقت:

اقرأ هذه القائمة بعناية؛ فالمشروع لا يُجري تقييمات للإصدارات التي انتهى دعمها، وبالتالي فإن إشعاراته لا تذكر سوى الإصدارات المدعومة. قد تكمن بعض هذه الأخطاء في أجزاء برمجية قد لا يحتويها الإصدار 20 أصلاً؛ فعلى سبيل المثال، إحدى ثغرات CVE في أكتوبر هي تراجع برمجي (regression) حصره المشروع في 26.x و24.x فقط. لذا فإن الوصف الدقيق والصريح لحالة كل ثغرة CVE في Node.js 20 هو أنها غير مصلحة وغير خاضعة للتقييم. لم يخبرك أحد بأنك بأمان، ولن يتطوع أحد للتحقق من ذلك نيابة عنك.

وما يزيد الطين بلة هو تسلسل الأخطاء البرمجية (Bug chains)؛ فإصلاح DNS في أكتوبر يُكمل إصلاحًا صدر في يونيو، وإصلاح يوليو يُكمل إصلاحًا آخر من يونيو. فكل تصحيح لاحق يُبنى على تصحيح سابق لا تملكه في نظامك.

Timeline of Node.js 20: last build on March 24, 2026, End-of-Life on April 30, then security releases on June 18, July 29 and October 21 with no 20.x fix, and the November 11 release still pending

«لكنه ما زال يعمل دون مشاكل!»

هذا صحيح، وتلك هي المشكلة بعينها.

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

اختر هدف الترقية: Node.js 24 أو 26، وتجنب 22

انتقل إلى الإصدار 24 هذا الأسبوع إذا كنت تبحث عن المسار الأقصر والأسهل، أو اختر 26 إذا كنت قادرًا على التعامل مع المزيد من الميزات المحذوفة وترغب في الحصول على أطول فترة دعم ممكنة. وتجاوز الإصدار 22؛ فعلى الرغم من حصوله على إصلاحات شهر نوفمبر، إلا أن دعمه سينتهي في 30 أبريل 2027—أي بعد أقل من ستة أشهر من الآن—مما سيضطرك لتكرار عملية الترقية بحلول الربيع القادم.

خط الإصدار الحالة أحدث إصدار في 5 نوفمبر نهاية الدعم الخيار الأنسب لـ
26.x “Lithium” دعم طويل الأمد نشط (Active LTS) منذ 28 أكتوبر 2026 26.13.0 30 أبريل 2029 الخدمات التي يمكنك إعادة اختبارها بالكامل الآن
24.x “Krypton” دعم صيانة طويل الأمد (Maintenance LTS) منذ 20 أكتوبر 2026 24.22.2 30 أبريل 2028 أسرع مخرج آمن من الإصدار 20
22.x “Jod” دعم صيانة طويل الأمد (Maintenance LTS) 22.23.4 30 أبريل 2027 لا يستحق عناء الترقية اليوم

هذه التواريخ مأخوذة من جدول إصدارات Node.js. تحقق من المنصة التي تستخدمها قبل اتخاذ القرار؛ فعلى سبيل المثال، لا تزال بيئة تشغيل Node.js 26 في Lambda في مرحلة المعاينة العامة (public preview) وليست مشمولة باتفاقية مستوى الخدمة (SLA)، لذا يُعد الإصدار 24 الهدف الأكثر أمانًا لبيئات الإنتاج هناك في الوقت الحالي.

Bar chart of Node.js support windows from November 2026: 22.x ends April 30, 2027, 24.x ends April 30, 2028, and 26.x ends April 30, 2029

خطوات الترقية والتغييرات الجذرية المتوقعة

كل ما ورد في هذا الجدول مستند إلى ملاحظات الإصدار الرسمية للإصدارات 22.0.0 و24.0.0 و25.0.0 و26.0.0، بالإضافة إلى دليل الترقية من v22 إلى v24. هذه قائمة مختصرة موجهة لخدمات واجهات برمجة التطبيقات (APIs)، وليست سجل التغييرات الكامل.

ظهر في التغيير المتأثرون به
22 import ... assert { type: 'json' } removed; use with شيفرات ESM التي تستورد ملفات JSON
22 crypto.createCipher() and createDecipher() removed شيفرات التشفير القديمة
23 and 24 No prebuilt 32-bit Windows or 32-bit armv7 Linux binaries; macOS 13.5 minimum الخوادم والأجهزة الطرفية القديمة
24 OpenSSL 3.5 at security level 2: RSA, DSA, and DH keys under 2048 bits, ECC keys under 224 bits, and RC4 are prohibited مصادقة mTLS والأنظمة المصدرية القديمة (upstreams)
24 tls.createSecurePair removed; url.parse() runtime-deprecated الشيفرات القديمة للشبكات
24 Stricter fetch() compliance, AbortSignal validation, stream and pipe errors now throw عملاء HTTP والخوادم الوسيطة (proxies)
24 V8 13.6; addons may need C++20 الوحدات البرمجية الأصلية (Native modules)
25 (if targeting 26) SlowBuffer and fs.F_OK, R_OK, W_OK, X_OK removed; Corepack no longer ships الأدوات المساعدة القديمة، واستخدام Yarn أو pnpm عبر Corepack
25 (if targeting 26) IP address as TLS servername moved to End-of-Life العملاء الذين يتصلون عبر عناوين IP
26 _stream_* modules and writeHeader() removed; module.register() runtime-deprecated; Undici 8 الشيفرات القديمة للتدفقات، وأدوات التحميل المخصصة (custom loaders)

سطر OpenSSL هو النقطة التي قد تفاجئك في صمت؛ فلن تحتاج لتغيير شيفرتك البرمجية، لكن عملية المصافحة (handshake) مع نظام قديم لأحد الشركاء ستفشل فجأة أثناء وقت التشغيل.

في فرع عمل جديد (branch)، قم بتحديث .nvmrc وحقل engines وملف Dockerfile وإعدادات CI للإشارة إلى خط الإصدار المستهدف (بالنسبة للأجهزة الجديدة، راجع دليل تثبيت Node.js). بعد ذلك، أعد التثبيت لإعادة بناء الوحدات الأصلية، وابحث عن واجهات برمجة التطبيقات المحذوفة، وشغّل أدوات التحويل البرمجي التلقائي الرسمية (codemods)، ثم ابدأ تشغيل الخدمة مع تفعيل تتبع الواجهات المهملة:

nvm install 24 && nvm use 24
rm -rf node_modules && npm ci

grep -rnE "assert \{ *type|createCipher\(|createDecipher\(|url\.parse\(|fs\.[FRWX]_OK|SlowBuffer|createSecurePair|_stream_[a-z]+|module\.register\(" \
  --include="*.js" --include="*.mjs" --include="*.ts" --exclude-dir=node_modules .

npx codemod run @nodejs/import-assertions-to-attributes
npx codemod run @nodejs/crypto-createcipheriv-migration
npx codemod run @nodejs/tls-create-secure-pair-to-tls-socket
npx codemod run @nodejs/fs-access-mode-constants

NODE_OPTIONS="--trace-deprecation" npm start

راجع نتائج codemod يدويًا؛ فالأمر المتعلق بـ createCipher واضح وصريح: الشيفرة البرمجية الناتجة لن تتمكن من فك تشفير البيانات التي تم تشفيرها بالواجهة القديمة، لذا خطط لترحيل البيانات إن كانت لديك أي بيانات مشفرة بها.

لا يتوفر دليل انتقال من 24 إلى 26 على موقع Node.js حتى الآن، لذا استعن بملاحظات الإصدارين 25.0.0 و26.0.0 لإجراء هذه القفزة.

تأكد من تطابق سلوك واجهة برمجة التطبيقات (API) على الإصدار الجديد

لا تُظهر اختبارات الوحدة (Unit tests) تأثير حزمة TLS الجديدة وعميل HTTP على حركة البيانات الفعلية. وعند الترقية بمقدار إصدارين رئيسيين أو ثلاثة، ستحتاج إلى مقارنة أداء الخدمة أثناء تشغيلها قبل الترقية وبعدها، وهنا يأتي الدور المثالي للمساعد البرمجي الذكي (Coding Agent).

تتيح لك أداة Apidog CLI تمكين أدوات مثل Claude Code أو Codex أو Cursor من تشغيل مجموعات اختبارات Apidog مباشرةً من الطرفية (terminal). يمكنك إعدادها لمرة واحدة عبر:

npm install -g apidog-cli@latest
apidog login --with-token <YOUR_TOKEN>
npx -y skills add https://apidog.com   # pick your agent when prompted

ثم وجّه هذا الطلب إلى مساعدك البرمجي:

My service runs on Node.js 20 in staging. Run Apidog test suite <suiteId> in project
<projectId> against environment <envId> and save reports to reports/node20. When I
redeploy on Node.js 24, run the same suite into reports/node24. List every request
whose status, body, or TLS behavior changed. Then read the service logs for deprecation
warnings and check each failure against the 22, 24, and 25 release notes: removed APIs,
changed defaults, stricter fetch and AbortSignal handling, OpenSSL key size rejections.

سيُشغّل المساعد البرمجي مجموعة الاختبارات نفسها قبل الترقية وبعدها:

apidog run --test-suite <suiteId> --project <projectId> -e <envId> \
  -r cli,junit --out-dir reports/node20

# redeploy the service on the target line, restart it

apidog run --test-suite <suiteId> --project <projectId> -e <envId> \
  -r cli,junit --out-dir reports/node24

أمران يضمنان دقة وموثوقية هذه المقارنة:

بمجرد نجاح الترقية، احتفظ بهذا الفحص ضمن مسار البناء والنشر التلقائي (CI/CD). يوضح دليل Apidog CLI لخطوط أنابيب CI/CD آلية سير العمل، بينما يشرح دليل Claude Code خطوات إعداد المساعد الذكي.

ماذا تفعل إذا لم تتمكن من الترقية هذا الأسبوع؟

شراء إصدارات مدعومة بتحديثات أمنية مدفوعة. تُحدد صفحة نهاية العمر التشغيلي لـ Node.js ثلاثة شركاء عبر برنامج استدامة منظومة OpenJS؛ حيث تقدم شركة HeroDevs دعمًا مستمرًا (Never-Ending Support) يشمل التحديثات الأمنية، وتوفر خدمة Endless Lifecycle Support من TuxCare نقل الإصلاحات إلى الإصدارات منتهية الدعم (backporting)، بينما تقدم NodeSource تقييمات للترقية ودعمًا فنيًا. ويصف المشروع هذا الخيار بأنه حل مؤقت، وهو كذلك بالفعل.

تقليص ما يمكنه الوصول إلى بيئة التشغيل. تُقلل هذه الخطوات من احتمالية التعرض لفئات الثغرات المذكورة أعلاه، لكنها لا تُصلحها جذريًا:

توثيق المخاطر كتابيًا. حدد مسؤولاً عن الترقية، وتاريخًا نهائيًا لتنفيذها، والضوابط التعويضية المطبقة، لضمان ألا يتحول هذا الحل «المؤقت» إلى وضع دائم.

زر

الأسئلة الشائعة

هل لا يزال Node.js 20 مدعومًا؟ لا، لقد انتهى عمره التشغيلي (End-of-Life) في 30 أبريل 2026. وكان آخر إصدار له هو 20.20.2 الصادر في 24 مارس 2026، ولن يُصدر المشروع أي تحديثات أخرى له.

هل يتأثر Node.js 20 بالثغرات الأمنية الصادرة في 11 نوفمبر؟ لم تُنشر تفاصيل ثغرات CVE علنًا بعد، لذا لا يمكن لأحد الجزم بأي منها يؤثر عليه. ومع ذلك، يؤكد الإشعار الأمني أن الإصدارات منتهية الصلاحية تتأثر دائمًا عند صدور تحديث أمني جديد، والمشروع لا يقوم بتقييمها بشكل فردي.

هل ينبغي الترقية إلى Node.js 22 كبديل؟ لا؛ فعلى الرغم من أنها القفزة الأصغر، إلا أن دعمه سينتهي في 30 أبريل 2027. الترقية إلى 24 تمنحك عامًا إضافيًا من الدعم، بينما تمنحك الترقية إلى 26 عامين إضافيين.

أيهما أختار: Node.js 24 أم 26؟ اختر الإصدار 24 إذا كنت بحاجة إلى الترقية العاجلة هذا الأسبوع أو إذا كانت منصتك لا تدعم الإصدار 26 بشكل كامل بعد. واختر الإصدار 26 إذا كنت قادرًا على إعادة اختبار كل شيء بالكامل الآن، حيث يستمر دعمه حتى 30 أبريل 2029.

أنا أستخدم Node.js 25، فهل ينطبق هذا عليّ؟ نعم، فقد وصل Node.js 25 إلى نهاية عمره التشغيلي في 1 يونيو 2026، وكان 25.9.0 هو آخر إصدار له. ولن يحصل هو الآخر على أي إصلاحات في نوفمبر، كما أن الترقية إلى 26 لا تفصلك عنها سوى ترقية إصدار رئيسي واحد.

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات