برمجياتقراءة دقيقتين

Node.js 26.8.0 يضيف دعم ZIP إلى zlib مع سقف لحجم المحتوى بعد الفك

المغزى

حماية من ملفات zip bomb كانت مسؤولية كل مطور يتذكرها أو ينساها، صارت جزءًا من الـ runtime نفسه، ومعها قد تختفي حزمة كاملة من كثير من المشاريع.

صدر Node.js 26.8.0 في 26 أغسطس 2026، ومن أبرز ما فيه إضافة ZipEntry وZipFile وZipBuffer إلى وحدة zlib. وفي اليوم نفسه صدر الإصدار 24.20.0 على خط الـ LTS.

وبحسب التوثيق الرسمي، تفتح الدالة zlib.ZipFile.open أرشيفًا، وتتيح entries المرور على محتوياته، وتضيف add وdelete ملفات أو تحذفها، فيما تسمح stream بقراءة ملف واحد من داخل الأرشيف دون فك الأرشيف كله. وهذا عمل كانت تؤديه قبل ذلك حزم خارجية على npm مثل adm-zip وjszip وyauzl.

لكن الجزء الأهم في الإضافة دالتان صغيرتان: zlib.setMaxZipContentSize وzlib.getMaxZipContentSize. وهما موجودتان لمواجهة ما يسمى zip bomb، وهو ملف مضغوط صغير الحجم يتضخم عند فكه إلى أحجام هائلة قد تستنفد ذاكرة الخادم وتوقفه.

والحماية الوحيدة من هذا النوع أن يوجد سقف لحجم المحتوى بعد الفك، يتوقف عنده البرنامج بدل الاستمرار حتى تنفد الذاكرة. وكثير من حزم الـ zip المتداولة لا تضع هذا السقف افتراضيًا.

ويعني ذلك أن أي endpoint يستقبل ملفات zip من المستخدمين صار بإمكانه الاعتماد على حماية موجودة في الـ runtime، بدل أن تكون خطوة يجب أن يتذكر المطور كتابتها بنفسه. كما يقلّص عدد الاعتماديات الخارجية في المشروع، وكل اعتمادية أقل هي نقطة أقل في سلسلة التوريد.

ويتضمن الإصدار نفسه إضافات أخرى، منها دعم close وSymbol.dispose في SQLite، وتلوين الصياغة في الـ REPL. وبعد ساعات صدر الإصدار 26.8.1، وسببه الوحيد أن الأمر node –version كان يعرض رقم نسخة alpha عن طريق الخطأ.

المصادر

  1. توثيق zlib الرسمي
  2. ملاحظات إصدار Node.js 26.8.0
  3. الـ PR الذي أضاف دعم ZIP
  4. إصدار 24.20.0 على خط LTS

من عدد الخميس 14 ربيع الأول - 27 أغسطس

أخبار ذات صلة

أخبار الخميس 14 ربيع الأول - 27 أغسطس