Nuevas líneas en nombres de archivo

24

Entiendo y acepto la premisa de que las secuencias de comandos defensivas de 1 shell son prudentes y, a largo plazo, más sostenibles.

Muchas de las respuestas a las preguntas de procesamiento de texto aquí siguen este principio incorporando las contingencias de respuestas para nombres de archivos poco ortodoxos; que puede contener espacios, guiones y nuevas líneas.

¿Qué tan frecuentes son las nuevas líneas en los nombres de archivo? Específicamente:

  • ¿Alguna aplicación crea nombres de archivo que incluyan nuevas líneas por defecto?
  • ¿Hay alguna situación en la que sería deseable crear dichos nombres de archivo?
  • ¿O son predominantemente una instancia de error del usuario?

[1] Significado planificación y gestión de la gama más amplia posible de escenarios y contingencias ...

Pregunta inspirada por el comentario (bastante quejumbroso) sobre esta pregunta .

jasonwryan
fuente
44
La respuesta corta es que los nombres de archivo extraños con líneas nuevas y / o caracteres no imprimibles nunca son una buena práctica, las aplicaciones sensatas no los crean, y solo los ve realmente si alguien está tratando de romper sus scripts de shell o programas que no manejan dichos nombres correctamente. Dejaré que otras personas proporcionen respuestas más detalladas con referencias y demás.
jw013 23/10/11

Respuestas:

26

Nunca he visto un nombre de archivo con una nueva línea distinta a las creadas deliberadamente para probar aplicaciones que manipulan nombres de archivos. Los nombres de archivo que contienen líneas nuevas pueden aparecer porque:

  • Algunos errores o errores del usuario (p. Ej., Un mal pegado y copiado) dieron como resultado un nombre de archivo no deseado.
  • Algunos daños en el sistema de archivos afectaron el nombre de un archivo.
  • Alguien creó deliberadamente un nombre de archivo "extraño" para explotar un agujero de seguridad, donde una aplicación confía más en los nombres de archivo que se pasó de lo que debería.

POSIX define un nombre de archivo como "un nombre que consta de 1 a {NAME_MAX} bytes utilizados para nombrar un archivo. Los caracteres que componen el nombre pueden seleccionarse del conjunto de todos los valores de caracteres, excluyendo el carácter de barra diagonal y el byte nulo. Los nombres de archivo DOT y punto-punto tiene un significado especial.”No hay garantía de que cada sistema de archivos aceptará‘nombres de archivos extraños’(el único garantizados caracteres son letras ASCII, dígitos, punto, guión y guión bajo , es decir A-Z, a-z, 0-9y ._-, con guión prohibido en la primera posición), pero la mayoría de los sistemas de archivos nativos en unidades modernas sí.

Gilles 'SO- deja de ser malvado'
fuente
Entonces, ¿ spacesen los nombres de archivo no se garantiza que sean portátiles? Sería útil si aclaras que esos últimos tres caracteres son period, underscore, and hyphen. Con el enlace subrayado, es difícil saberlo.
toxalot
44
@toxalot No, no se garantiza que los espacios sean portátiles, ni ,(utilizados por RCS), :(utilizados por X.org), ~(utilizados por muchos programas en archivos de copia de seguridad) ... Pero son compatibles con casi todos los sistemas modernos.
Gilles 'SO- deja de ser malvado'
22

Cuando escribo un artículo, a menudo recopilo una bibliografía de archivos PDF de varias fuentes. No todos estos contienen los metadatos correctos, lo que significa que a veces copio y pego el título del documento desde el visor de PDF al nombre del archivo. Esto a menudo da como resultado nuevas líneas dentro del nombre del archivo, pero nunca ha sido un problema con las herramientas que he usado.

En mi humilde opinión, no hay nada "defensivo" en la codificación de un estándar ... un estándar que establece que se permiten nuevas líneas en los nombres de archivo. Si su script no maneja todos los nombres de archivo permitidos en el estándar, entonces su script está roto.

sml
fuente
2
Gracias por el ejemplo del mundo real; subraya su punto sobre el estándar con bastante elocuencia ...
jasonwryan
66
+1 para "Si su script no maneja todos los nombres de archivo permitidos en el estándar, entonces su script está roto " (énfasis agregado)
jw013
3
Aquí está el argumento de un hombre de por qué deberíamos cambiar qué caracteres son aceptados en los nombres de archivo y yo personalmente estoy de acuerdo con él.
Chris Magnuson
⁺¹, ¡me encontré con esta publicación por exactamente la misma razón! Solo trato de descubrir cómo escribir un comando para convertir nuevas líneas en espacios.
Hola Angel
2

Nunca he visto a usuarios NORMALES usar nuevas líneas en los nombres de archivo. Parece que su propósito principal es (1) facilitar a los atacantes subvertir su sistema y (2) dificultar la escritura de programas seguros :-(. Sin embargo, los gustos modernos de Unix (como Linux) les permiten , por lo que debe prepararse para ellos si desea un programa que resista el ataque.

"Nombres de archivos y rutas en Shell: cómo hacerlo correctamente" muestra cómo manejar esto correctamente.

usuario45404
fuente
Soy un usuario normal y tengo nuevas líneas en los nombres de mis archivos. El escenario indicado en la respuesta de @sml me sucedió más de una vez. Lo que me interesa es cómo se puede usar una nueva línea en un nombre de archivo para "subvertir el sistema". ¿Tienes alguna fuente que explique eso?
Joseph R.
@JosephR. No puedo pensar en una manera de comprometer un sistema, pero podría usarlo como un DOS para aplicaciones que no manejan nuevas líneas (y en su lugar se bloquean)
strugee