4 个版本
0.2.0 | 2023 年 7 月 7 日 |
---|---|
0.1.2 | 2023 年 5 月 26 日 |
0.1.1 | 2023 年 5 月 26 日 |
0.1.0 | 2023 年 5 月 26 日 |
834 在 文件系统
396 每月下载量
9KB
164 行
Tower 中间件用于清理路径。
任何用于访问底层文件系统的路径遍历技术都将从请求路径中移除。例如,一个带有 /../../passwd
的请求在传递给内部服务之前将变为 /passwd
。
示例
use http::{Request, Response, StatusCode};
use hyper::Body;
use std::{iter::once, convert::Infallible};
use tower::{ServiceBuilder, Service, ServiceExt};
use tower_sanitize_path::SanitizePathLayer;
# #[tokio::main]
# async fn main() -> Result<(), Box<dyn std::error::Error>> {
async fn handle(req: Request<Body>) -> Result<Response<Body>, Infallible> {
// `req.uri().path()` will not be usable to traverse the filesystem
# Ok(Response::new(Body::empty()))
}
let mut service = ServiceBuilder::new()
// sanitize the paths
.layer(SanitizePathLayer)
.service_fn(handle);
// call the service
let request = Request::builder()
// `handle` will see `/secret`
.uri("/../../secret")
.body(Body::empty())?;
service.ready().await?.call(request).await?;
#
# Ok(())
# }
依赖项
~640KB
~10K SLoC