Squ*_*rel 2 security filenames sanitization rust
鉴于滚动自己的通常不是一个很好的安全想法,Rust 中是否有一个 crate 或库函数来清理文件名?最近的 'nul' crate 表明存在一些特定于操作系统的问题。
“安全”主要取决于您的威胁模型。
如果您只是想避免您的文件系统被错误的文件名损坏,那么有个好消息,您不需要做任何事情,因为文件系统 API 会拒绝无效名称并出现错误。尽管如果您想要文件名而不是路径,您必须小心不要使用采用AsRef<Path>或去除路径分隔符的API (请参阅 参考资料std::path::is_separator),因为它们将接受绝对或相对路径。
如果您需要处理来自不受信任输入的相对路径,您至少必须剥离..路径以阻止目录遍历攻击。
如果您想避免对人而不是软件的攻击,则必须进行大量清理,例如删除可能会在文件扩展名方面误导用户的 Unicode 文本方向覆盖。
最近的 'nul' crate 表明存在一些特定于操作系统的问题。
这不是特定平台上不安全的问题。这里的问题是跨平台兼容性之一。在 UNIX 系统上工作的东西并不能很好地转换到 Windows 系统上。但是 Windows 系统安全地失败了,它只是导致错误,Cargo 以特定方式处理该错误(停止更新)。它可以选择以不同的方式处理失败,例如通过跳过那个特定的 crate 或通过修改文件名。