Baris baru dalam nama file


24

Saya memahami dan menerima premis bahwa scripting defensive 1 shell lebih bijaksana dan, dalam jangka panjang, lebih berkelanjutan.

Banyak jawaban untuk pertanyaan pemrosesan teks di sini mengikuti prinsip ini dengan membangun kemungkinan kontingensi untuk nama file yang tidak ortodoks; yang mungkin berisi spasi, tanda hubung dan garis baru.

Seberapa lazimkah baris baru dalam nama file? Secara khusus:

  • Apakah ada aplikasi yang membuat nama file yang menyertakan baris baru secara default?
  • Apakah ada situasi di mana diinginkan untuk membuat nama file seperti itu?
  • Atau apakah mereka sebagian besar merupakan contoh kesalahan pengguna?

[1] Berarti merencanakan dan mengelola berbagai kemungkinan skenario dan kemungkinan ...

Pertanyaan yang diilhami oleh komentar (agak sedih) tentang pertanyaan ini .


4
Jawaban singkatnya adalah nama file aneh dengan baris baru dan / atau karakter yang tidak patut tidak pernah praktik yang baik, aplikasi yang masuk akal tidak membuatnya, dan Anda hanya benar-benar melihatnya jika seseorang mencoba untuk memecahkan skrip shell Anda atau program yang tidak menangani nama-nama tersebut dengan benar. Saya akan membiarkan orang lain memberikan jawaban yang lebih rinci dengan referensi dan semacamnya.
jw013

Jawaban:


26

Saya belum pernah melihat nama file dengan baris baru selain yang sengaja dibuat untuk menguji aplikasi yang memanipulasi nama file. Nama file yang mengandung baris baru dapat muncul karena:

  • Beberapa bug atau kesalahan pengguna (mis. Salin-tempel yang buruk) menghasilkan nama file yang tidak diinginkan.
  • Beberapa kerusakan sistem file memengaruhi nama file.
  • Seseorang dengan sengaja membuat nama file "aneh" untuk mengeksploitasi lubang keamanan, di mana aplikasi menaruh kepercayaan lebih pada nama file yang dilewatkan dari yang seharusnya.

POSIX mendefinisikan nama file sebagai “nama yang terdiri dari 1 hingga {NAME_MAX} byte yang digunakan untuk menamai file. Karakter yang menyusun nama dapat dipilih dari himpunan semua nilai karakter tidak termasuk karakter slash dan byte nol. Nama file dot dan dot-dot memiliki arti khusus.”Tidak ada jaminan bahwa setiap filesystem akan menerima‘aneh’nama file (hanya dijamin karakter huruf ASCII, angka, periode, tanda hubung dan garis bawah , yaitu A-Z, a-z, 0-9dan ._-, dengan tanda hubung dilarang di posisi pertama), tetapi kebanyakan filesystem asli pada unix modern melakukannya.


Jadi spacesdalam nama file tidak dijamin portabel? Akan sangat membantu jika Anda menjelaskan bahwa ketiga karakter terakhir adalah period, underscore, and hyphen. Dengan tautan yang digarisbawahi, sulit untuk mengatakannya.
toxalot

4
@toxalot Tidak, spasi tidak dijamin portabel, atau ,(digunakan oleh RCS), :(digunakan oleh X.org), ~(digunakan oleh banyak program pada file cadangan), ... Tetapi semuanya didukung oleh hampir semua sistem modern.
Gilles 'SO- stop being evil'

22

Saat menulis makalah, saya sering mengumpulkan daftar pustaka file PDF dari berbagai sumber. Tidak semua ini mengandung metadata yang benar, yang berarti saya terkadang menyalin-menempelkan judul kertas dari penampil PDF ke nama file. Ini sering menghasilkan baris baru dalam nama file, tetapi tidak pernah menjadi masalah dengan alat apa pun yang saya gunakan.

IMHO tidak ada yang 'defensif' tentang pengkodean ke standar .. standar yang menyatakan bahwa baris baru diizinkan dalam nama file. Jika skrip Anda tidak menangani semua nama file yang diizinkan dalam standar, maka skrip Anda rusak.


2
Terima kasih atas contoh dunia nyata; itu menggarisbawahi poin Anda tentang standar dengan cukup fasih ...
jasonwryan

6
+1 untuk "Jika skrip Anda tidak menangani semua nama file yang diizinkan dalam standar, maka skrip Anda rusak " (penekanan ditambahkan)
jw013

3
Berikut adalah argumen satu orang tentang mengapa kita harus mengubah karakter apa yang diterima dalam nama file dan saya pribadi setuju dengannya.
Chris Magnuson

⁺¹, saya menemukan posting ini karena alasan yang persis sama! Hanya mencoba mencari cara untuk menulis perintah untuk mengubah baris baru menjadi spasi.
Hi-Angel

2

Saya belum pernah melihat pengguna NORMAL menggunakan baris baru dalam nama file. Tampaknya tujuan utama mereka adalah (1) mempermudah penyerang menumbangkan sistem Anda, dan (2) mempersulit untuk menulis program yang aman :-(. Namun, Unix-like modern (seperti Linux) memungkinkan mereka , jadi Anda harus bersiap untuk mereka jika Anda menginginkan program yang tahan serangan.

"Nama file dan Nama Path di Shell: Cara melakukannya dengan benar" menunjukkan cara menangani ini dengan benar.


Saya adalah pengguna normal dan saya memiliki baris baru dalam nama file saya. Skenario yang dinyatakan dalam jawaban @ml terjadi pada saya lebih dari sekali. Yang menarik bagi saya adalah bagaimana bisa baris baru dalam nama file digunakan untuk "menumbangkan sistem"? Apakah Anda memiliki sumber yang menjelaskan hal itu?
Joseph R.

@ JosephephR. Saya tidak bisa memikirkan cara untuk mengkompromikan suatu sistem, tetapi Anda bisa menggunakannya sebagai DOS untuk aplikasi yang tidak menangani jalur baru (dan malah crash)
strugee
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.