来自“氧化案例:Rust 编程语言” Sergio Benitez 说,
这是一个用 Rocket 编写的静态文件服务器。它正好是四行,保证不会受到目录遍历攻击。
这四行是:
#[get("/<path..>")]
fn files(path: PathBuf) -> Option<NamedFile> {
NamedFile::open(Path::new("static/").join(path)).ok()
}
这张幻灯片的底部说,
FromParam*
PathBuf
验证路径安全的实现
我了解了一种类型如何通过验证输入来保证安全性(就像任何对象都可以在构造函数中一样,或者函数的输入如何用验证函数包装。
dangerousThing(validateSafety(input))
许多语言都提供了这一点。我也了解如何通过将其放入类型或类的构造函数中来简化它,
class Path {
constructor(path) { this._path = validateSafety(path) }
}
但我对 Rust 在这里的不同之处(如果有的话)感到困惑。这还有什么?