Ответ 1
Минимум - это косая черта ('/') и NULL ('\ 0')
Рассмотрим диалог Сохранить как со свободной текстовой записью, в которой пользователь вводит имя файла в качестве свободного текста, затем нажимает кнопку Сохранить. Затем программное обеспечение проверяет имя файла и сохраняет файл, если имя действительно.
В файловой системе Unix какие правила должны применяться при проверке, так что:
Итак, каков минимальный набор символов, который должен быть ограничен из имени файла Unix?
Минимум - это косая черта ('/') и NULL ('\ 0')
Во-первых, вы описываете черный список. Лучше выбрать белый список ваших персонажей, поскольку проще (с точки зрения пользователя) вставлять, а не убирать символы.
С точки зрения того, что было бы хорошо в среде Unix:
_
)-
).
)Должен охватить ваши основы. Пробелы могут быть в порядке, но усложняют ситуацию. Пользователи Windows любят их, unix/linux - нет. Поэтому в зависимости от вашей целевой аудитории выберите соответственно.
Часто забывается: двоеточие (:) не является хорошей идеей, поскольку оно обычно используется в таких вещах, как $PATH, т.е. список каталогов, где исполняемые файлы найдены "автоматически". Это может вызвать путаницу с именами каталогов DOS/Windows, где, конечно, двоеточие используется в именах дисков.
Хотя принятый ответ может иметь правду, я думаю, что есть преимущество в том, что есть некоторые ограничения, которые могут быть потенциально раздражающими для сценариев или других вещей:
(- может быть, пространство, хотя я неохотно добавляю это.)
Как вы можете видеть, вам может быть лучше избавиться от белого списка, как предлагает @Gavin...
Не забывайте, что вы можете добавить точку (.
) в начале, чтобы скрыть файлы и папки... В противном случае, я бы следовал соглашению * NIX name (из Википедии):
Большинство файловых систем UNIX
/
, null
.Как указывает Bombe в своем ответе, ограничение пользовательского ввода, по крайней мере, разочаровывает, если не прямо раздражает. Однако, как разработчики, мы должны предполагать, что любое взаимодействие с нашим кодом является вредоносным, и относиться к ним как к таковым.
Чтобы решить обе проблемы в практическом приложении, вместо того, чтобы перечислять определенные символы белым или черным цветом, нам просто не следует использовать пользовательский ввод в качестве имени файла.
Вместо этого используйте безопасное имя (шестнадцатеричные символы [a-f0-9]
только для максимальной безопасности) нашего собственного устройства, либо кодированное из пользовательского ввода (например, PHP bin2hex), либо сгенерированное случайным образом Идентификатор (например, PHP uniqid), который затем каким-либо способом (на ваш выбор) отображается на вход пользователя.
Кодирование/декодирование может быть выполнено на лету, не полагаясь на отображение, поэтому оно практически идеально. Пользователь никогда не должен знать, как на самом деле называется файл; до тех пор, пока они могут получить/установить файл, и он называется так, как они хотели, каждый победитель.
С помощью этой методологии пользователь может называть свой файл так, как ему нравится, хакеры будут единственными разочарованными людьми, а ваша файловая система будет любить вас :-)
Позвольте пользователю ввести любое имя, которое он хочет. Искусственное ограничение диапазона символов будет только раздражать пользователей и не будет служить реальной цели.