ขึ้นบรรทัดใหม่ในชื่อไฟล์


24

ฉันเข้าใจและยอมรับหลักฐานว่าการเขียนสคริปต์เชลล์1 แบบป้องกันเป็นเรื่องที่รอบคอบและในระยะยาวจะมีความยั่งยืนมากขึ้น

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

บรรทัดใหม่ที่แพร่หลายในชื่อไฟล์เป็นอย่างไร โดยเฉพาะ:

  • แอปพลิเคชันใด ๆ ที่สร้างชื่อไฟล์ที่มีบรรทัดใหม่เป็นค่าเริ่มต้นหรือไม่
  • มีสถานการณ์ใดบ้างที่ต้องการสร้างชื่อไฟล์ดังกล่าว
  • หรือพวกเขาส่วนใหญ่เป็นตัวอย่างของข้อผิดพลาดของผู้ใช้?

[1] ความหมายการวางแผนและการจัดการสถานการณ์และภาระผูกพันที่เป็นไปได้ในวงกว้างที่สุด ...

คำถามที่ได้รับแรงบันดาลใจจากความคิดเห็น (ค่อนข้างน่าตำหนิ) ในคำถามนี้


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

คำตอบ:


26

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

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

POSIX กำหนดชื่อไฟล์ว่า“ ชื่อที่ประกอบด้วย 1 ถึง {NAME_MAX} ไบต์ที่ใช้ในการตั้งชื่อไฟล์ อักขระที่เขียนชื่ออาจถูกเลือกจากชุดของค่าอักขระทั้งหมดยกเว้นอักขระเครื่องหมายทับและไบต์ว่าง ชื่อไฟล์จุดและจุดจุดมีความหมายพิเศษ. แปลก ‘ชื่อไฟล์ (เพียง” ไม่มีการรับประกันว่าทุกระบบแฟ้มจะยอมรับไม่เป็น’ การประกันตัวอักษรตัวอักษร ASCII, ตัวเลข, ช่วงเวลา, ยัติภังค์และขีดคือA-Z, a-z, 0-9และ._-มียัติภังค์ ห้ามใช้ในตำแหน่งแรก) แต่ระบบไฟล์เนทีฟส่วนใหญ่ใน unices ที่ทันสมัยทำ


ดังนั้นspacesในชื่อไฟล์ไม่รับประกันว่าจะพกพาได้หรือไม่ period, underscore, and hyphenมันจะเป็นประโยชน์หากคุณได้ชี้แจงว่าผู้ที่ผ่านมาสามตัวอักษร ด้วยลิงก์ที่ขีดเส้นใต้เป็นเรื่องยากที่จะบอก
toxalot

4
@toxalot No ไม่มีการรับประกันช่องว่างที่จะพกพาหรือ,(ใช้โดย RCS), :(ใช้โดย X.org), ~(ใช้โดยโปรแกรมจำนวนมากในไฟล์สำรอง), ... แต่ก็รองรับระบบที่ทันสมัยเกือบทั้งหมด
Gilles 'หยุดความชั่วร้าย'

22

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

IMHO ไม่มีอะไรที่ 'ป้องกัน' เกี่ยวกับการเข้ารหัสมาตรฐาน .. มาตรฐานที่ระบุว่าอนุญาตให้ขึ้นบรรทัดใหม่ในชื่อไฟล์ หากสคริปต์ของคุณไม่ได้จัดการชื่อไฟล์ทั้งหมดที่อนุญาตในมาตรฐานแสดงว่าสคริปต์ของคุณเสีย


2
ขอบคุณสำหรับตัวอย่างโลกแห่งความจริง มันขีดเส้นใต้จุดของคุณเกี่ยวกับมาตรฐานค่อนข้างฉะฉาน ...
jasonwryan

6
+1 สำหรับ "หากสคริปต์ของคุณไม่ได้จัดการชื่อไฟล์ทั้งหมดที่ได้รับอนุญาตในมาตรฐานแสดงว่าสคริปต์ของคุณเสีย " (เน้นการเพิ่ม)
jw013


⁺¹ฉันเจอโพสต์นี้เพราะเหตุผลเดียวกัน! แค่พยายามคิดหาวิธีเขียนคำสั่งเพื่อแปลงบรรทัดใหม่เป็นช่องว่าง
Hi-Angel

2

ฉันไม่เคยเห็นผู้ใช้ NORMAL ใช้การขึ้นบรรทัดใหม่ในชื่อไฟล์ ดูเหมือนว่าจุดประสงค์หลักของพวกเขาคือ (1) ทำให้ผู้โจมตีสามารถทำลายระบบของคุณได้ง่ายและ (2) ทำให้การเขียนโปรแกรมที่ปลอดภัย: ยากยิ่งขึ้น :-( อย่างไรก็ตาม Unix-like ที่ทันสมัย ​​(เช่น Linux) อนุญาตให้พวกเขา ดังนั้นคุณต้องเตรียมพร้อมสำหรับพวกเขาหากคุณต้องการโปรแกรมที่ต่อต้านการโจมตี

"ชื่อไฟล์และชื่อพา ธ ใน Shell: วิธีการทำอย่างถูกต้อง"แสดงวิธีจัดการอย่างถูกต้อง


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

@JosephR ฉันไม่สามารถคิดวิธีที่จะประนีประนอมระบบได้ แต่คุณสามารถใช้มันเป็นดอสกับแอพพลิเคชั่นที่ไม่รองรับบรรทัดใหม่ (และล้มเหลวแทน)
strugee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.