Rust中是否有安全/清理的文件名功能

时间:2017-05-15 06:58:12

标签: security rust filenames sanitization

鉴于滚动自己通常不是一个很好的安全想法,Rust中是否有一个crate或库函数来清理文件名?最近的'nul'箱子证明了一些特定于操作系统的问题。

1 个答案:

答案 0 :(得分:3)

"安全"主要取决于你的威胁模型。

如果您只是想避免文件系统因文件名错误而被破坏,那么有好消息,您不需要做任何事情,因为文件系统API会拒绝有错误的无效名称。虽然如果您想要文件名而不是路径,您必须小心不要使用带AsRef<Path>或剥离路径分隔符的API(请参阅std::path::is_separator),因为他们会接受绝对或相对路径。

如果需要处理来自不受信任输入的相对路径,则至少必须剥离..路径以停止目录遍历攻击。

如果您想避免攻击人类而不是软件,则必须进行大量清理,例如删除可能误导用户文件扩展名的Unicode文本方向覆盖。

  

最近的&#39; nul&#39; crate表明存在一些特定于操作系统的问题。

这不是特定平台上不安全的问题。这里的问题是跨平台兼容性之一。在UNIX系统上运行的东西并没有很好地转换为Windows系统。但Windows系统安全失败,它只是导致错误,Cargo以特定方式处理该错误(停止更新)。它本可以选择以不同的方式处理故障,例如通过跳过一个特定的箱子或通过修改文件名。