首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从apache web服务器输入筛选器返回HTTP 403?

如何从apache web服务器输入筛选器返回HTTP 403?
EN

Stack Overflow用户
提问于 2018-06-02 14:29:00
回答 1查看 245关注 0票数 2

我已经编写了一个Apache2.x模块,它尝试扫描请求正文,如果某些模式匹配,则有条件地返回403禁止。

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

这种方法的问题是,当我读取请求的POST主体(使用ap_get_client_block和朋友)时,它显然消耗了主体,因此如果请求随后被mod_proxy处理,主体就消失了。

我认为扫描正文的正确方法是使用输入筛选器,但输入筛选器只能返回APR_SUCCESS或fail。除了APR_SUCCESS之外的任何返回代码都会被转换为HTTP 400 Bad Request

我想,如果输入过滤器想要使请求失败,也许我可以在请求注释中存储一个标志,但我不确定以后使用哪个钩子来获得该标记。

EN

回答 1

Stack Overflow用户

发布于 2018-06-04 07:51:30

事实证明非常简单-只需将一个错误存储桶放入brigade:

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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50654166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档