Нові рядки у назви файлів


24

Я розумію і приймаю передумову, що оборонний сценарій 1 оболонки є і розважливим, і в довгостроковій перспективі, більш стійким.

Багато відповідей на питання обробки тексту тут дотримуються цього принципу, будуючи обставини відповідей на неортодоксальні назви файлів; які можуть містити пробіли, тире та нові рядки.

Наскільки поширені нові рядки у назви файлів? Конкретно:

  • Чи створюють якісь додатки імена файлів, які за замовчуванням містять нові рядки?
  • Чи є ситуації, коли було б бажано створити такі імена файлів?
  • Або вони переважно є випадком помилки користувача?

[1] Мається на увазі планування та управління якомога ширшим діапазоном сценаріїв та надзвичайних ситуацій ...

Питання, натхнене (досить жалюгідним) коментарем до цього питання .


4
Коротка відповідь - химерні назви файлів з новими рядками та / або недрукованими символами ніколи не є хорошою практикою, розсудливі програми не створюють їх, і ви дійсно їх бачите лише тоді, коли хтось намагається зламати ваші сценарії оболонки або програми, які неправильно обробляють такі імена. Я дозволю іншим надати більш детальні відповіді із посиланнями та ін.
jw013

Відповіді:


26

Я ніколи не бачив імені файлу з новим рядком, окрім свідомо створеного для тестування програм, які маніпулюють іменами файлів. Імена файлів, що містять нові рядки, можуть з'являтися, оскільки:

  • Деякі помилки чи помилки користувача (наприклад, неправильна копіювальна паста) призвели до ненавмисного імені файлу.
  • Деякі пошкодження файлової системи вплинули на ім'я файлу.
  • Хтось навмисно створив "дивне" ім'я файлу для використання отвору в безпеці, де програма додала більше довіри до імен файлів, яким він був переданий, ніж належить.

POSIX визначає ім'я файлу як "ім'я, що складається з 1 до {NAME_MAX} байт, які використовуються для імені файлу. Символи, що складають ім'я, можуть бути обрані з набору всіх знаків символів, виключаючи косую рису та нульовий байт. Імена файлів точка і точка-точка мають особливе значення. »Там немає ніякої гарантії , що кожна файлова система буде приймати" дивні "імена файлів (єдині гарантовані символи ASCII букви, цифри, час, дефіс і підкреслення , тобто A-Z, a-z, 0-9і ._-, з дефісом заборонено в першій позиції), але більшість власних файлових систем у сучасних уніцях це роблять.


Тож spacesу назви файлів не гарантовано є портативними? Було б корисно, якщо ви уточнили, що ці три останні символи є period, underscore, and hyphen. З підкресленим посиланням важко сказати.
токсалот

4
@toxalot Ні, місця не гарантуються як портативні, ні ,(використовуються RCS), :(використовуються X.org), ~(використовуються багатьма програмами в резервних файлах), ... Але вони підтримуються майже всіма сучасними системами.
Жил "ТАК - перестань бути злим"

22

Пишучи папір, я часто збираю бібліографію PDF-файлів з різних джерел. Не всі вони містять правильні метадані, це означає, що я іноді копіюю і вставляю заголовок паперу з переглядача PDF у ім'я файлу. Це часто призводить до появи нових рядків у назві файлу, але ніколи не виникало проблем із будь-якими інструментами, якими я користувався.

У IMHO немає нічого "оборонного" щодо кодування до стандарту. Стандарт, в якому зазначено, що нові рядки дозволені у назви файлів. Якщо ваш скрипт не обробляє всі імена файлів, дозволені в стандарті, ваш сценарій порушений.


2
Дякуємо за приклад реального світу; це підкреслює вашу думку про стандарт досить красномовно ...
Jasonwryan

6
+1 за "Якщо ваш сценарій не обробляє всі імена файлів, дозволені в стандарті, ваш сценарій порушений " (наголос додано)
jw013


⁺¹, я наткнувся на цю посаду саме з тієї самої причини! Просто намагаюся розібратися, як написати команду для перетворення нових рядків у пробіли.
Привіт-Ангел

2

Я ніколи не бачив, щоб користувачі NORMAL використовували нові рядки у назви файлів. Виявляється, що їх основна мета - (1) полегшити зловмисникам підрив вашої системи, а також (2) ускладнити написання захищених програм :-(. Однак сучасні лайкси Unix (наприклад, Linux) дозволяють їм , тому вам доведеться підготуватися до них, якщо ви хочете, щоб програма, яка чинить опір атаці.

"Імена файлів та імена в оболонці: як це зробити правильно" показує, як правильно поводитися з цим.


Я звичайний користувач і у своїх іменах файлів є нові рядки. Сценарій, вказаний у відповіді @sml, траплявся зі мною не раз. Що мені цікаво - як можна використовувати новий рядок у назві файлу для "підриву системи"? Чи є у вас джерела, які пояснюють це?
Джозеф Р.

@JosephR. Я не можу придумати спосіб компрометувати систему, але ви можете використовувати її як DOS для додатків, які не обробляють нові лінії (і замість цього виходять з
ладу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.