【发布时间】:2019-10-15 10:37:18
【问题描述】:
来自"A Case for Oxidation: The Rust Programming Language"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 在这里所做的不同(如果有的话)感到困惑。还有什么其他的吗?
【问题讨论】:
标签: rust rust-rocket