Подтвердить что ты не робот

Какие символы должны быть ограничены именем файла Unix?

Рассмотрим диалог Сохранить как со свободной текстовой записью, в которой пользователь вводит имя файла в качестве свободного текста, затем нажимает кнопку Сохранить. Затем программное обеспечение проверяет имя файла и сохраняет файл, если имя действительно.

В файловой системе Unix какие правила должны применяться при проверке, так что:

  • Название не будет сложно манипулировать позже с точки зрения экранирования специальных символов и т.д.
  • Правила не настолько ограничивают, что сохранение файла становится неприемлемым.

Итак, каков минимальный набор символов, который должен быть ограничен из имени файла Unix?

4b9b3361

Ответ 1

Минимум - это косая черта ('/') и NULL ('\ 0')

Ответ 2

Во-первых, вы описываете черный список. Лучше выбрать белый список ваших персонажей, поскольку проще (с точки зрения пользователя) вставлять, а не убирать символы.

С точки зрения того, что было бы хорошо в среде Unix:

  • а-г
  • A-Z
  • 0-9
  • подчеркивание (_)
  • тире (-)
  • период (.)

Должен охватить ваши основы. Пробелы могут быть в порядке, но усложняют ситуацию. Пользователи Windows любят их, unix/linux - нет. Поэтому в зависимости от вашей целевой аудитории выберите соответственно.

Ответ 3

Часто забывается: двоеточие (:) не является хорошей идеей, поскольку оно обычно используется в таких вещах, как $PATH, т.е. список каталогов, где исполняемые файлы найдены "автоматически". Это может вызвать путаницу с именами каталогов DOS/Windows, где, конечно, двоеточие используется в именах дисков.

Ответ 4

Хотя принятый ответ может иметь правду, я думаю, что есть преимущество в том, что есть некоторые ограничения, которые могут быть потенциально раздражающими для сценариев или других вещей:

  • косая черта (/)
  • обратная косая черта (\)
  • NULL (\ 0)
  • tick (`)
  • начинается с тире (-)
  • звезда (*)
  • трубы (|)
  • точка с запятой (;)
  • цитаты ( "или" )
  • двоеточие (:)

(- может быть, пространство, хотя я неохотно добавляю это.)

Как вы можете видеть, вам может быть лучше избавиться от белого списка, как предлагает @Gavin...

Ответ 5

Не забывайте, что вы можете добавить точку (.) в начале, чтобы скрыть файлы и папки... В противном случае, я бы следовал соглашению * NIX name (из Википедии):

Большинство файловых систем UNIX

  • Обработка регистра: регистр с учетом регистра
  • Допустимый набор символов: любой.
  • Зарезервированные символы: /, null.
  • Максимальная длина: 255.
  • Примечания: ведущий. указывает на то, что ls и файловые менеджеры не будут по умолчанию показать файл

Ссылка на статью в википедии об именах файлов

Ответ 6

Кодировать FTW

Как указывает Bombe в своем ответе, ограничение пользовательского ввода, по крайней мере, разочаровывает, если не прямо раздражает. Однако, как разработчики, мы должны предполагать, что любое взаимодействие с нашим кодом является вредоносным, и относиться к ним как к таковым.

Чтобы решить обе проблемы в практическом приложении, вместо того, чтобы перечислять определенные символы белым или черным цветом, нам просто не следует использовать пользовательский ввод в качестве имени файла.

Вместо этого используйте безопасное имя (шестнадцатеричные символы [a-f0-9] только для максимальной безопасности) нашего собственного устройства, либо кодированное из пользовательского ввода (например, PHP bin2hex), либо сгенерированное случайным образом Идентификатор (например, PHP uniqid), который затем каким-либо способом (на ваш выбор) отображается на вход пользователя.

Кодирование/декодирование может быть выполнено на лету, не полагаясь на отображение, поэтому оно практически идеально. Пользователь никогда не должен знать, как на самом деле называется файл; до тех пор, пока они могут получить/установить файл, и он называется так, как они хотели, каждый победитель.

С помощью этой методологии пользователь может называть свой файл так, как ему нравится, хакеры будут единственными разочарованными людьми, а ваша файловая система будет любить вас :-)

Ответ 7

Позвольте пользователю ввести любое имя, которое он хочет. Искусственное ограничение диапазона символов будет только раздражать пользователей и не будет служить реальной цели.