8个版本
0.6.0 | 2024年7月22日 |
---|---|
0.5.6 | 2023年10月30日 |
0.5.5 | 2023年9月19日 |
0.5.1 | 2023年8月7日 |
#10 in #reqwest-middleware
每月下载量 176
84KB
1.5K SLoC
http-acl-reqwest
reqwest的ACL中间件。
为什么?
允许用户创建任意HTTP请求或指定任意URL以进行提取,如webhook的系统容易受到SSRF攻击。例如,恶意用户可能拥有一个解析到私有IP地址的域名,然后使用该域名向内部服务发起请求。
此库提供了一种简单的ACL,允许您指定哪些主机、端口和IP范围可以访问。然后,可以在请求发出之前使用ACL确保用户的请求符合ACL的要求。
警告
需要设置DNS解析器,以便ACL在由DNS解析器解析的IP地址上生效。如果未设置DNS解析器,则ACL将不会在IP地址上强制执行。
用法
use http_acl_reqwest::{HttpAcl, HttpAclMiddleware};
use reqwest::Client;
use reqwest_middleware::ClientBuilder;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create an HTTP ACL
let acl = HttpAcl::builder()
.add_denied_host("example.com".to_string())
.unwrap()
.build();
// Create the HTTP ACL middleware
let middleware = HttpAclMiddleware::new(acl.clone());
// Create a reqwest client with the DNS resolver
let client = Client::builder()
.dns_resolver(middleware.dns_resolver())
.build()
.unwrap();
// Create a reqwest client with the middleware
let client_with_middleware = ClientBuilder::new(client)
.with(middleware)
.build();
// Make a request to a denied host
assert!(client_with_middleware.get("http://example.com/").send().await.is_err());
Ok(())
}
文档
参见 docs.rs.
依赖项
~4–15MB
~204K SLoC