Nowe linie w nazwach plików

24

Rozumiem i akceptuję założenie, że defensywne skrypty powłoki 1 są zarówno ostrożne, jak i, w dłuższej perspektywie, bardziej zrównoważone.

Wiele odpowiedzi na pytania dotyczące przetwarzania tekstu tutaj jest zgodne z tą zasadą, wykorzystując nieprzewidziane odpowiedzi na nazwy plików; które mogą zawierać spacje, myślniki i nowe wiersze.

Jak rozpowszechnione są nowe wiersze w nazwach plików? Konkretnie:

  • Czy jakieś aplikacje domyślnie tworzą nazwy plików zawierające znaki nowej linii?
  • Czy istnieją sytuacje, w których pożądane byłoby utworzenie takich nazw plików?
  • A może są to głównie błędy użytkownika?

[1] Oznacza planowanie i zarządzanie jak najszerszym zakresem scenariuszy i sytuacji awaryjnych ...

Pytanie inspirowane (raczej żałosnym) komentarzem do tego pytania .

jasonwryan
źródło
4
Krótka odpowiedź to dziwne nazwy plików z nowymi wierszami i / lub znaki, które nie mogą być drukowane, nigdy nie są dobrą praktyką, rozsądne aplikacje ich nie tworzą, a naprawdę widzisz je tylko, jeśli ktoś próbuje złamać twoje skrypty powłoki lub programy, które nie obsługują takich nazw poprawnie. Pozwolę innym osobom udzielić bardziej szczegółowych odpowiedzi z referencjami i tym podobne.
jw013,

Odpowiedzi:

26

Nigdy nie widziałem nazwy pliku z nową linią inną niż celowo utworzona do testowania aplikacji, które manipulują nazwami plików. Nazwy plików zawierające znaki nowej linii mogą pojawić się, ponieważ:

  • Niektóre błędy lub błędy użytkownika (np. Zła kopia-wklej) spowodowały niezamierzoną nazwę pliku.
  • Niektóre uszkodzenia systemu plików wpłynęły na nazwę pliku.
  • Ktoś celowo stworzył „dziwną” nazwę pliku, aby wykorzystać lukę w zabezpieczeniach, w której aplikacja bardziej zaufała nazwom plików, które zostały przekazane, niż powinna.

POSIX definiuje nazwę pliku jako „nazwę składającą się z 1 do {NAME_MAX} bajtów używanych do nazwania pliku. Znaki składające się na nazwę można wybrać ze zbioru wszystkich wartości znaków oprócz znaku ukośnika i bajtu zerowego. Nazwy plików kropka i kropka-kropka mają szczególne znaczenie.”Nie ma żadnej gwarancji, że każdy system plików będzie akceptować«dziwne»nazwy plików (jedyny gwarantowane znaki to litery ASCII, cyfry, kropka, myślnik i podkreślenia , to znaczy A-Z, a-z, 0-9i ._-, z myślnikiem zabronione na pierwszej pozycji), ale większość rodzimych systemów plików na współczesnych systemach unikowych.

Gilles „SO- przestań być zły”
źródło
Czy spacesw nazwach plików nie można zagwarantować przenośności? Przydałoby się wyjaśnienie, że te trzy ostatnie postacie są period, underscore, and hyphen. Podkreślonym linkiem trudno powiedzieć.
toxalot
4
@toxalot Nie, spacje nie są gwarantowane jako przenośne, ani ,(używane przez RCS), :(używane przez X.org), ~(używane przez wiele programów do tworzenia kopii zapasowych plików),… Ale są one obsługiwane przez prawie wszystkie nowoczesne systemy.
Gilles „SO- przestań być zły”
22

Pisząc artykuł, często zbieram bibliografię plików PDF z różnych źródeł. Nie wszystkie z nich zawierają prawidłowe metadane, co oznacza, że ​​czasami kopiuję i wklejam tytuł artykułu z przeglądarki PDF do nazwy pliku. Powoduje to często pojawienie się nowego wiersza w nazwie pliku, ale nigdy nie było problemu z żadnym narzędziem, którego użyłem.

IMHO nie ma nic „defensywnego” w kodowaniu do standardu… standardu, który stwierdza, że ​​nowe nazwy są dozwolone w nazwach plików. Jeśli skrypt nie obsługuje wszystkich nazw plików dozwolonych w standardzie, oznacza to, że skrypt jest uszkodzony.

sml
źródło
2
Dzięki za przykład z prawdziwego świata; dość elokwentnie podkreśla twój punkt widzenia na temat standardu ...
jasonwryan
6
+1 dla „Jeśli twój skrypt nie obsługuje wszystkich nazw plików dozwolonych w standardzie, wtedy twój skrypt jest uszkodzony ” (
wyróżnienie
3
Oto argument jednego człowieka, dlaczego powinniśmy zmienić znaki, które są akceptowane w nazwach plików, a ja osobiście się z nim zgadzam.
Chris Magnuson
⁺¹, natrafiłem na ten post z dokładnie tego samego powodu! Próbuję tylko dowiedzieć się, jak napisać polecenie konwersji znaków nowej linii na spacje.
Cześć Anioł
2

Nigdy nie widziałem, aby użytkownicy NORMALNI używali nowego wiersza w nazwach plików. Wygląda na to, że ich głównym celem jest (1) ułatwienie atakującym obalenia twojego systemu i (2) utrudnienie pisania bezpiecznych programów :-(. Jednak pozwalają na to nowoczesne systemy uniksowe (takie jak Linux). , więc musisz się na nie przygotować, jeśli chcesz program odporny na atak.

„Nazwy plików i ścieżki w powłoce: Jak to zrobić poprawnie” pokazuje, jak poprawnie to zrobić .

użytkownik45404
źródło
Jestem zwykłym użytkownikiem i mam nowe linie w nazwach plików. Scenariusz opisany w odpowiedzi @sml przytrafił mi się więcej niż jeden raz. Co mnie interesuje, w jaki sposób można użyć nowej linii w nazwie pliku do „obalenia systemu”? Czy masz jakieś źródła, które to wyjaśniają?
Joseph R.
@JosephR. Nie mogę wymyślić sposobu na skompromitowanie systemu, ale możesz go użyć jako DOS dla aplikacji, które nie obsługują nowych linii (i zamiast tego
ulegają