Newline nei nomi dei file


24

Comprendo e accetto la premessa che lo script difensivo 1 shell è sia prudente che, a lungo termine, più sostenibile.

Molte delle risposte alle domande sull'elaborazione del testo seguono questo principio inserendo le contingenze delle risposte per i nomi di file non ortodossi; che potrebbe contenere spazi, trattini e nuove linee.

Quanto sono prevalenti le nuove linee nei nomi dei file? In particolare:

  • Qualche applicazione crea nomi di file che includono newline per impostazione predefinita?
  • Ci sono situazioni in cui sarebbe desiderabile creare tali nomi di file?
  • O sono prevalentemente un'istanza di errore dell'utente?

[1] Significato pianificazione e gestione della più ampia gamma possibile di scenari e contingenze ...

Domanda ispirata al commento (piuttosto lamentoso) su questa domanda .


4
La risposta breve è nomi di file bizzarri con nuove righe e / o caratteri non stampabili non sono mai buone pratiche, le app sensibili non li creano e li vedi davvero solo se qualcuno sta cercando di rompere i tuoi script di shell o programmi che non gestiscono correttamente tali nomi. Lascerò che altre persone forniscano risposte più dettagliate con riferimenti e simili.
jw013,

Risposte:


26

Non ho mai visto un nome di file con una nuova riga diversa da quelle create deliberatamente per testare applicazioni che manipolano i nomi di file. I nomi dei file contenenti newline possono apparire perché:

  • Alcuni errori o errori dell'utente (ad es. Un copia-incolla non valido) hanno provocato un nome di file non intenzionale.
  • Alcuni danni al filesystem hanno influenzato il nome di un file.
  • Qualcuno ha creato deliberatamente uno "strano" nome di file per sfruttare un buco di sicurezza, in cui un'applicazione ha dato più fiducia ai nomi dei file che è stata passata di quanto avrebbe dovuto.

POSIX definisce un nome file come "un nome costituito da 1 a {NAME_MAX} byte utilizzati per denominare un file. I caratteri che compongono il nome possono essere selezionati dall'insieme di tutti i valori dei caratteri, esclusi il carattere barra e il byte null. I nomi dei file DOT e punto-punto hanno un significato speciale.”Non v'è alcuna garanzia che ogni filesystem accetterà‘strani nomi dei file’(l'unica garantiti caratteri sono caratteri ASCII, cifre, periodo, trattino e sottolineatura , per esempio A-Z, a-z, 0-9e ._-, con il trattino vietato in prima posizione), ma la maggior parte dei filesystem nativi sui moderni unice lo fanno.


Quindi i spacesnomi dei file non sono garantiti come portatili? Sarebbe utile se chiarissi che questi ultimi tre personaggi sono period, underscore, and hyphen. Con il link sottolineato, è difficile dirlo.
Toxalot

4
@toxalot No, gli spazi non sono garantiti come portatili, né ,(usati da RCS), :(usati da X.org), ~(usati da molti programmi su file di backup), ... Ma sono supportati da quasi tutti i sistemi moderni.
Gilles 'SO- smetti di essere malvagio' il

22

Quando scrivo un documento, colleziono spesso una bibliografia di file PDF da varie fonti. Non tutti contengono i metadati corretti, il che significa che a volte copia e incolla il titolo del documento dal visualizzatore PDF nel nome file. Ciò si traduce spesso in nuove righe all'interno del nome del file, ma non è mai stato un problema con gli strumenti che ho usato.

Secondo me non c'è nulla di "difensivo" nel codificare secondo uno standard ... uno standard che afferma che le nuove righe sono consentite nei nomi dei file. Se lo script non gestisce tutti i nomi di file consentiti nello standard, lo script è danneggiato.


2
Grazie per l'esempio del mondo reale; sottolinea in modo abbastanza eloquente il tuo punto sullo standard ...
Jasonwryan,

6
+1 per "Se lo script non gestisce tutti i nomi di file consentiti nello standard, lo script è interrotto " (corsivo aggiunto)
jw013


⁺¹, mi sono imbattuto in questo post proprio per lo stesso motivo! Sto solo cercando di capire come scrivere un comando per convertire le nuove righe in spazi.
Hi-Angel,

2

Non ho mai visto gli utenti NORMAL usare le nuove righe nei nomi dei file. Sembra che il loro scopo principale sia quello di (1) facilitare agli aggressori di sovvertire il sistema e (2) rendere più difficile la scrittura di programmi sicuri :-(. Tuttavia, i moderni Mi piace di Unix (come Linux) consentono loro , quindi devi prepararti se vuoi un programma che resista all'attacco.

"Nomi di file e nomi di percorso in Shell: come farlo correttamente" mostra come gestirlo correttamente.


Sono un utente normale e ho nuove righe nei nomi dei miei file. Lo scenario indicato nella risposta di @sml mi è successo più di una volta. La cosa interessante per me è come si può usare una nuova riga nel nome di un file per "sovvertire il sistema"? Hai qualche fonte che lo spiega?
Joseph R.,

@JosephR. Non riesco a pensare a un modo per compromettere un sistema, ma potresti usarlo come DOS per le applicazioni che non gestiscono nuove linee (e non si bloccano invece)
strugee
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.