考虑使用带有自由文本条目的另存为对话框,其中用户输入文件名作为自由文本,然后点击保存按钮。然后,软件验证文件名,如果名称有效,则保存文件。
在Unix文件系统上,应在验证中应用哪些规则:
基本上,应该从Unix文件名限制的最小字符集是什么?
答案 0 :(得分:50)
minimum 是斜杠('/')和NULL('\ 0')
答案 1 :(得分:33)
首先,您所描述的是black listing。更好的选择是white list你的角色,因为从用户的角度来看,更容易插入而不是带走角色。
就unix环境中的好处而言:
应该涵盖您的基础知识。空间可以,但让事情变得困难。 Windows用户喜欢它们,unix / linux不喜欢它们。因此,根据您的目标受众选择相应的。
答案 2 :(得分:17)
经常被遗忘:冒号(:)不是一个好主意,因为它常用于$ PATH之类的东西,即“自动”找到可执行文件的目录列表。这可能会导致与DOS / Windows目录名混淆,当然冒号在驱动器名称中使用。
答案 3 :(得分:13)
虽然接受的答案可能有道理,但我认为有一些限制可能会对脚本或其他内容造成伤害:
( - 也许空间虽然我不愿意添加它。)
正如你所看到的那样,你可能会更好地将白名单改为@Gavin建议......
答案 4 :(得分:10)
不要忘记你可以在开头添加一个点(.
)来隐藏文件和文件夹......否则,我会遵循* NIX名称约定(来自维基百科):
大多数UNIX文件系统
/
,null
。答案 5 :(得分:5)
正如Bombe在他们的回答中指出的那样,限制用户输入至少令人沮丧,如果不是非常烦人的话。虽然,作为开发人员,我们应该假设每次与我们的代码的交互都是恶意的,并将其视为这样。
要解决实际应用中的两个问题,而不是将某些字符列入白名单或黑名单,我们就不应该使用用户输入作为文件名。
相反,请使用我们自己设计的安全名称(十六进制字符[a-f0-9]
仅用于最终安全性),或者来自用户输入的编码(例如PHP's bin2hex),或者随机生成的ID(例如PHP's uniqid),然后通过某种方法(将您的选择)映射到用户输入。
编码/解码可以在不依赖映射的情况下即时完成,因此几乎是理想的。用户永远不需要知道真正调用的文件是什么;只要他们可以获取/设置文件,出现就可以调用他们想要的内容,每个人都是赢家。
通过这种方法,用户可以随心所欲地调用他们的文件,黑客将是唯一受挫的人,并且您的文件系统会爱你: - )
答案 6 :(得分:-3)
让用户输入他想要的任何名称。人为地限制字符范围只会使用户烦恼,并没有真正的用途。