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 .


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.


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.


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

⁺¹, 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ć .


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ą
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.