Novas linhas nos nomes de arquivos


24

Entendo e aceito a premissa de que o script defensivo 1 shell é prudente e, a longo prazo, mais sustentável.

Muitas das respostas às perguntas sobre processamento de texto aqui seguem esse princípio, incorporando as contingências de respostas para nomes de arquivos não ortodoxos; que podem conter espaços, traços e novas linhas.

Qual a predominância de novas linhas nos nomes de arquivos? Especificamente:

  • Algum aplicativo cria nomes de arquivos que incluem novas linhas por padrão?
  • Existem situações em que seria desejável criar esses nomes de arquivos?
  • Ou eles são predominantemente uma instância de erro do usuário?

[1] Significado do planejamento e gerenciamento da maior variedade possível de cenários e contingências ...

Pergunta inspirada no comentário (bastante queixoso) sobre essa questão .


4
Resposta curta: nomes de arquivos bizarros com novas linhas e / ou caracteres não imprimíveis nunca são boas práticas, aplicativos sensíveis não os criam e você realmente os vê apenas se alguém estiver tentando quebrar seus scripts de shell ou programas que não tratam esses nomes corretamente. Permitirei que outras pessoas forneçam respostas mais detalhadas com referências e coisas do tipo.
Jw013 23/11

Respostas:


26

Nunca vi um nome de arquivo com uma nova linha diferente daquela criada deliberadamente para testar aplicativos que manipulam nomes de arquivos. Os nomes de arquivo que contêm novas linhas podem aparecer porque:

  • Alguns erros ou erros do usuário (por exemplo, uma cópia e colagem incorreta) resultaram em um nome de arquivo não intencional.
  • Alguma corrupção do sistema de arquivos afetou um nome de arquivo.
  • Alguém criou deliberadamente um nome de arquivo "estranho" para explorar uma falha de segurança, em que um aplicativo confiava mais nos nomes de arquivo pelos quais foi passado do que deveria.

O POSIX define um nome de arquivo como “um nome que consiste em 1 a {NAME_MAX} bytes usado para nomear um arquivo. Os caracteres que compõem o nome podem ser selecionados no conjunto de todos os valores de caracteres, exceto o caractere de barra e o byte nulo. Os nomes de arquivos ponto e ponto-ponto tem um significado especial.”Não há nenhuma garantia de que cada sistema de arquivos vai aceitar‘’nomes de arquivos estranhos (o único garantido personagens são letras ASCII, dígitos, período, hífen e sublinhado , ou seja A-Z, a-z, 0-9e ._-, com hífen proibido na primeira posição), mas a maioria dos sistemas de arquivos nativos das organizações modernas o fazem.


Então, spacesnos nomes de arquivos não é garantido que seja portátil? Seria útil se você esclarecesse que esses três últimos caracteres são period, underscore, and hyphen. Com o link sublinhado, é difícil dizer.
precisa saber é

4
@toxalot Não, não é garantido que os espaços sejam portáteis, nem ,(usado pelo RCS), :(usado pelo X.org), ~(usado por muitos programas em arquivos de backup),… Mas eles são suportados por quase todos os sistemas modernos.
Gilles 'SO- stop be evil'

22

Ao escrever um artigo, coleciono frequentemente uma bibliografia de arquivos PDF de várias fontes. Nem todos contêm os metadados corretos, o que significa que às vezes copio e cole o título do papel do visualizador de PDF no nome do arquivo. Isso geralmente resulta em novas linhas no nome do arquivo, mas nunca foi um problema com nenhuma ferramenta que eu usei.

IMHO não há nada de "defensivo" em codificar para um padrão .. um padrão que afirma que novas linhas são permitidas em nomes de arquivos. Se o seu script não manipular todos os nomes de arquivos permitidos no padrão, ele será quebrado.


2
Obrigado pelo exemplo do mundo real; sublinha o seu ponto sobre o padrão bastante eloquentemente ...
jasonwryan

6
+1 para "Se o seu script não manipular todos os nomes de arquivos permitidos no padrão, seu script será corrompido " (ênfase adicionada)
jw013 30/10/11


I, me deparei com este post exatamente pelo mesmo motivo! Apenas tentando descobrir como escrever um comando para converter novas linhas em espaços.
Hi-Angel

2

Eu nunca vi usuários NORMAL usarem novas linhas nos nomes de arquivos. Parece que o objetivo principal é (1) facilitar a subversão do invasor e (2) tornar mais difícil a criação de programas seguros :-(. No entanto, os gostos modernos do Unix (como o Linux) os permitem , então você precisa se preparar para eles, se quiser um programa que resista ao ataque.

"Nomes de arquivos e nomes de caminho no Shell: como fazer isso corretamente" mostra como lidar com isso corretamente.


Eu sou um usuário normal e tenho novas linhas nos meus nomes de arquivo. O cenário indicado na resposta de @sml aconteceu comigo mais de uma vez. O que é interessante para mim é como uma nova linha em um nome de arquivo pode ser usada para "subverter o sistema"? Você tem alguma fonte explicando isso?
Joseph R.

@JosephR. Eu não consigo pensar em uma maneira de comprometer um sistema, mas você pode usá-lo como um DOS para aplicativos que lidam com não faça novas linhas (e falhar em vez)
strugee
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.