gpt4 book ai didi

c - 如何从 Apache Web 服务器输入过滤器返回 HTTP 403?

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:58 32 4
gpt4 key购买 nike

我编写了一个 apache 2.x 模块,它尝试扫描请求主体,并在某些模式匹配时有条件地返回 403 Forbidden。

我的第一次尝试使用 ap_hook_handler 来拦截请求,扫描它然后返回 DECLINED 给真正的处理程序可以接管(如果条件满足则返回 403)。

这种方法的问题是当我读取请求的 POST 正文时(使用 ap_get_client_block 和 friend ),它显然消耗了正文,所以如果请求随后由 mod_proxy 处理,正文就消失了.

我认为扫描 body 的正确方法是使用输入过滤器,但输入过滤器只能返回 APR_SUCCESS 或失败。 APR_SUCCESS 以外的任何返回码都会被转换为 HTTP 400 Bad Request

我认为如果输入过滤器想要使请求失败,我可能可以在请求注释中存储一个标志,但我不确定稍后哪个 Hook 会得到它。

最佳答案

事实证明这很简单 - 只需将一个错误桶放入旅中即可:

apr_bucket_brigade *brigade = apr_brigade_create(f->r->pool, f->r->connection->bucket_alloc);
apr_bucket *bucket = ap_bucket_error_create(403, NULL, f->r->pool,
f->r->connection->bucket_alloc);
APR_BRIGADE_INSERT_TAIL(brigade, bucket);
bucket = apr_bucket_eos_create(f->r->connection->bucket_alloc);
APR_BRIGADE_INSERT_TAIL(brigade, bucket);
ap_pass_brigade(f->next, brigade);

关于c - 如何从 Apache Web 服务器输入过滤器返回 HTTP 403?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50654166/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com