当前位置:  开发笔记 > 编程语言 > 正文

应该从Unix文件名限制哪些字符?

如何解决《应该从Unix文件名限制哪些字符?》经验,为你挑选了6个好方法。

考虑带有自由文本条目的" 另存为"对话框,其中用户输入文件名作为自由文本,然后单击" 保存"按钮.然后,软件验证文件名,如果名称有效,则保存文件.

在Unix文件系统上,应在验证中应用哪些规则,以便:

在转义特殊字符等方面,该名称将难以操纵.

规则不是那么严格,以至于保存文件变得非用户友好.

基本上,应该从Unix文件名限制的最小字符集是什么?



1> mouviciel..:

最小是斜线( '/')和NULL( '\ 0')


这是非常严厉的答案.应该对应用程序进行编码,以假设用户不受约束(因此在打开文件时,它应该接受任何名称).对于保存(新)文件,这不是一个好的答案; 对文件名设置一些限制是合理的.
并且ASCII NUL'\ 0',因为它标志着文件名的结尾:D

2> Gavin Miller..:

首先,你所描述的是黑名单.您更好的选择是将您的角色列入白名单,因为更容易(从用户的角度来看)插入字符而不是删除.

就unix环境中的好处而言:

AZ

AZ

0-9

下划线(_)

破折号( - )

期间(.)

应该涵盖你的基础知识.空间可以,但让事情变得困难.Windows用户喜欢它们,unix/linux不喜欢它们.因此,根据您的目标受众选择相应的.


我会认为任何有问题的重音字符都是用户不友好的
使用不同语言的文件名会发生什么?

3> unwind..:

经常被遗忘:冒号(:)不是一个好主意,因为它常用于$ PATH之类的东西,即"自动"找到可执行文件的目录列表.这可能会导致与DOS/Windows目录名混淆,当然冒号在驱动器名称中使用.



4> ThinkBonobo..:

虽然接受的答案可能有道理,但我认为有一些限制可能会对脚本或其他东西造成伤害:

正斜杠(/)

反斜杠(\)

NULL(\ 0)

打勾(`)

以破折号( - )开头

明星(*)

管道(|)

分号(;)

报价("或")

冒号(:)

( - 也许空间虽然我不愿意添加它.)

正如你可以看到的那样,你可能会更好地将白名单改为@Gavin建议......



5> Tobias Wärre..:

不要忘记你可以.在开头添加一个点()来隐藏文件和文件夹......否则,我会遵循*NIX名称约定(来自维基百科):

大多数UNIX文件系统

案件处理:案例敏感案件保存

允许的字符集:任何.

保留字符:/,null.

最大长度:255.

备注:领先.表示ls和文件管理器默认不显示该文件

链接到维基百科关于文件名的文章



6> Fred Gandt..:
编码FTW

正如Bombe在他们的回答中指出的那样,限制用户输入至少令人沮丧,如果不是彻头彻尾的讨厌.但是,作为开发人员,我们应该假设与代码的每次交互都是恶意的,并将其视为恶意.

要在实际应用中解决这两个问题,而不是将某些字符列入白色或黑色,我们不应该使用用户输入作为文件名.

相反,使用[a-f0-9]我们自己设计的安全名称(十六进制字符仅用于最终安全),或者从用户输入(例如PHP的bin2hex)编码,或者随机生成的ID(例如PHP的uniqid),然后通过某种方法进行映射(取你的选择)到用户输入.

编码/解码可以在不依赖于映射的情况下即时完成,因此实际上是理想的.用户永远不需要知道文件的真正用途; 只要他们能够获取/设置文件,它似乎被称为他们想要的东西,每个人都是胜利者.

通过这种方法,用户可以随心所欲地调用他们的文件,黑客将成为唯一受挫的,并且您的文件系统会爱你:-)

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有