Какие символы должны быть ограничены из имени файла Unix? - PullRequest
59 голосов
/ 19 января 2009

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

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

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

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

Ответы [ 7 ]

51 голосов
/ 19 января 2009

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

33 голосов
/ 19 января 2009

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

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

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

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

17 голосов
/ 19 января 2009

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

13 голосов
/ 10 декабря 2015

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

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

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

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

10 голосов
/ 19 января 2009

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

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

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

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

5 голосов
/ 26 апреля 2017

Кодировать FTW

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

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

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

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

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

0 голосов
/ 19 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...