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

Download history 1/week @ 2024-04-28 6/week @ 2024-06-02 20/week @ 2024-06-09 24/week @ 2024-06-16 8/week @ 2024-06-30 127/week @ 2024-07-21 49/week @ 2024-07-28

每月下载量 176

Apache-2.0

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