【发布时间】:2018-11-12 05:30:54
【问题描述】:
我编写了一个 apache 2.x 模块,它尝试扫描请求正文,如果某些模式匹配,则有条件地返回 403 Forbidden。
我的第一次尝试使用ap_hook_handler 来拦截请求,对其进行扫描,然后将DECLINED 返回给可以接管的真正处理程序(如果满足条件,则返回403)。
这种方法的问题是,当我读取请求的 POST 正文时(使用 ap_get_client_block 和朋友),它显然消耗了正文,因此如果请求随后由 mod_proxy 处理,则正文消失了。
我认为扫描正文的正确方法是使用输入过滤器,但输入过滤器只能返回 APR_SUCCESS 或失败。除 APR_SUCCESS 之外的任何返回代码都将转换为 HTTP 400 Bad Request。
如果输入过滤器想要使请求失败,我想也许我可以在请求注释中存储一个标志,但我不确定以后哪个钩子会得到那个。
【问题讨论】:
标签: c apache apache2 apache2.4 apache2-module