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