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

مكتبة encoding/json/v2 تصبح مستقرة في Go 1.27 وتصحح أربعة افتراضات خاطئة في القديمة

أعلن فريق Go في 4 نوفمبر 2026، في مقالة على مدونة اللغة الرسمية، أن مكتبتي encoding/json/v2 وencoding/json/jsontext صارتا مستقرتين ومتاحتين للاستخدام العام في Go 1.27. وتسرد المقالة العيوب التي دفعت إلى الإصدار الجديد، وأغلبها من نوع واحد: الافتراضي في المكتبة القديمة كان خاطئًا.

وأوضح مثال عليها سؤال يبدو بسيطًا. إذا وصل object يحتوي على المفتاح نفسه مرتين بقيمتين مختلفتين، فأي القيمتين تُعتمد؟ المعيار RFC 8259 لا يحدد ذلك، فكل تطبيق حر في أن يأخذ الأولى أو الأخيرة أو يدمج أو يرفض. ويعني هذا أن خدمتين تقرآن الطلب نفسه قد تصلان إلى نتيجتين مختلفتين، وهو ما استُغل من قبل في الثغرة المعروفة CVE-2017-12635.

وتذكر المقالة أربعة افتراضات في المكتبة القديمة encoding/json. الأول قبول UTF-8 غير صالح، رغم أن المعيار يطلب رفضه، فتكون النتيجة فساد بيانات صامتًا في الأنظمة التالية. والثاني قبول المفاتيح المكررة. والثالث تحويل slice أو map فارغة إلى null، ما يكسر التطبيقات الأخرى التي تنتظر array أو object، مع أن استطلاعًا أظهر أن أغلب مستخدمي Go يفضلون المصفوفة أو الكائن الفارغ.

والرابع مطابقة أسماء الحقول في الـ JSON مع حقول الـ struct دون حساسية لحالة الحروف. وتصف المقالة نفسها هذا الافتراض بأنه مفاجئ، وبأنه ثغرة أمنية محتملة.

وأهمية الإعلان تتجاوز Go. فالأسئلة الأربعة نفسها قائمة في كل مكتبة JSON بكل لغة، والفارق أن فريق Go قرر تغيير الافتراضي ونشر الأسباب. وفي الأنظمة التي تتوزع على خدمات مكتوبة بلغات مختلفة، قد يتحول اختلاف مكتبتين في قراءة مفتاح مكرر إلى ثغرة في التحقق من الصلاحيات، لا إلى مجرد اختلاف في السلوك.

المصادر

  1. مقالة A new Go API for JSON على مدونة Go

من عدد الخميس 25 جمادى الأولى - 5 نوفمبر

أخبار ذات صلة

أخبار الخميس 25 جمادى الأولى - 5 نوفمبر