DevOps
من الرفع اليدوي إلى النشر الآلي — أول خط CI/CD لمشروعك
أربع مراحل، ومجلد إصدار لكل نشرة، ووصلة رمزية تتحوّل في لحظة. ملف واحد يجعل جواب "ما الذي يعمل الآن؟" رقم إيداع محدّداً.
في 18 أيار 2026 نشرت Drupal الإشعار PSA-2026-05-18. لم يصف ثغرة، بل قال إن إصلاحاً بالغ الخطورة لـ core سيصدر يوم الأربعاء 20 أيار بين الساعة 17:00 و21:00 بتوقيت UTC، وأعطى درجة الخطورة سلفاً: 20 من 25 على مقياس Drupal، بـ access complexity معدوم وauthentication معدومة — أي أن استغلال الثغرة، أياً كانت، لن يحتاج حساباً ولا ظروفاً استثنائية.
وصدر التحديث كما وُعد. وكان فيه CVE-2026-9082، وهو SQL injection في core مصنّف Critical، يصيب كل الإصدارات ابتداءً من 8.9.0، وعولج في 10.4.10 و10.5.10 و10.6.9 و11.1.10. وصدرت 3 advisories أخرى لـ core في اليوم نفسه: CVE-2026-6365 وCVE-2026-6367 لـ XSS، وCVE-2026-6366 لـ object injection.
لا يفعل هذا أي framework شائع آخر. فـ Next.js وReact وNestJS تُفصح جميعها لحظة الترقيع، وهو موقف له وجاهته، ويعني أيضاً أن أول مرة تسمع فيها بالخبر هي اللحظة نفسها التي يسمعه فيها المهاجمون. أما Drupal فتمنحك نافذة، ولا يكاد أحد يستعملها.
ليست لقراءة الـ advisory — فلا شيء ليُقرأ بعد. بل للوصول إلى موعد الإصدار وقد نُزعت المخاطرة من التحديث مسبقاً:
drush status أو composer show drupal/core على كل موقع أنت مسؤول عنه، ودوّن النتيجة. الفرق بين الإصدار الذي تفترضه والإصدار العامل يتكرر كفاية ليجعل هذه الخطوة هي التي يتخطاها الناس ثم يندمون.backup واستعِده في مكان ما. لا "خذ backup" فحسب، بل نفّذ restore. الـ backup غير المُختبَر ليس خطة تراجع.composer update يعمل أصلاً. patches لم تعد تنطبق، وmodule مهجور مقيَّد بـ core قديم، وإصدار PHP تُسقطه النسخة الجديدة — اكتشف هذه يوم الاثنين لا أثناء النافذة.فحين يصل الـ advisory، يجب أن يكون الترقيع أمراً واحداً وsmoke test.
تستخدم Drupal هذه القناة أيضاً لأمر أقل إثارة وأخطر: الإشعار PSA-2026-07-22 أفاد بأن التغطية الأمنية أُزيلت عن مشروع.
الـ module غير المدعوم لا يتوقف عن العمل، بل يتوقف النظر إليه. لن يصدر advisory عن ثغرته التالية، ولا رقم CVE، ولا شيء في update report عندك — يبقى الـ module جالساً هناك، بهدوء، خارج النظام الذي يخبرك حين يقع خطأ. وهذا أسوأ من ثغرة معروفة، لأن الثغرة المعروفة تولّد تنبيهاً على الأقل.
اقرأ كل PSA لإزالة التغطية في مقابل قائمة مشاريعك. الإزالة موعد نهائي: استبدل الـ module، أو تبنّه، أو اقبل أنك صرت فريقه الأمني.
3 feeds، وليست feed واحدة:
https://www.drupal.org/security/rss.xml
https://www.drupal.org/security/contrib/rss.xml
https://www.drupal.org/security/psa/rss.xmlالـ core، ومشاريع الـ contrib، والإشعارات المسبقة. وfeed الـ PSA أهدأ الثلاثة، وهي الوحيدة التي تمنحك وقتاً. ضعها حيث يراها إنسان في يومها — قائمة بريدية، أو قناة محادثة، أو أي شيء غير مجلد في صندوق وارد.
قيمة إنذار مدته يومان محصورة كلياً في أن يقرأه أحدهم في اليوم الأول.
DevOps
أربع مراحل، ومجلد إصدار لكل نشرة، ووصلة رمزية تتحوّل في لحظة. ملف واحد يجعل جواب "ما الذي يعمل الآن؟" رقم إيداع محدّداً.
الأمن
4 ثغرات في NestJS خلال 7 أشهر، وكلها ثغرة واحدة: الـ matcher والـ handler اختلفا على العنوان نفسه. مكان التحقق هو حيث تُقرأ البيانات.
SEO
يدمج Next.js الـ metadata مفتاحاً مفتاحاً، فالـ route الذي يغفل alternates يرث canonical الخاص بالـ layout. وعندنا كان يشير بكل صفحة إلى الرئيسية.