3 个版本 (破坏性更新)
0.3.0 | 2023 年 12 月 9 日 |
---|---|
0.2.0 | 2023 年 12 月 6 日 |
0.1.0 | 2023 年 12 月 4 日 |
#1103 in 文件系统
18KB
198 行
Path
Ratchet
在类型级别预防路径遍历攻击。
use std::path::PathBuf;
use path_ratchet::prelude::*;
let user_input = "/etc/shadow";
let mut filename = PathBuf::from("/tmp");
filename.push_component(SingleComponentPath::new(user_input).unwrap());
lib.rs
:
PathBuf::push
允许任何形式的路径遍历
#
let user_input = "/etc/shadow";
let mut filename = PathBuf::from("/tmp");
filename.push(user_input);
assert_eq!(filename, PathBuf::from("/etc/shadow"));
相反 <PathBuf as PushPathComponent>::push_component
要求路径只有一个元素。
use std::path::PathBuf;
use path_ratchet::prelude::*;
let user_input = "/etc/shadow";
let mut filename = PathBuf::from("/tmp");
filename.push_component(SingleComponentPath::new(user_input).unwrap());
安全性
检查路径的平台必须与使用它的平台相同。例如,路径 C:\path\to\file.txt
在 UNIX 系统上将被解释为文件或目录名。
SingleComponentPath::new(r"C:\path\to\file.txt").unwrap();