2

我们将部分 nginx 访问控制委托给一个单独的服务,我们使用 access_by_lua_file 和 lua-resty-hawk 以及子请求来对请求进行身份验证。

文档说:

在启动子请求之前,您应该始终阅读请求正文(通过调用 ngx.req.read_body 或配置 lua_need_request_body)。

最初我们错过了这个细节,事情似乎正在发挥作用。我试图找到有关此要求的更多背景信息,但一无所获。

在读取正文之前授权请求会很好,因为如果客户端只是试图上传各种垃圾并填满我们的磁盘,我们可能能够提前终止连接并防止一种 DoS 攻击。

为什么会有这个限制?

4

1 回答 1

1

由于没有人回答这个问题,我想通过引用官方文档来澄清原因。

always_forward_bodybody设置为 true 时,如果未指定该选项,则当前(父)请求的请求正文将始终转发到正在创建的子请求。ngx.req.read_body() 或 lua_need_request_body on 读取的请求体将直接转发给子请求,在创建子请求时不会复制整个请求体数据(无论请求体数据缓冲在内存缓冲区还是临时文件中) . 默认情况下,该选项为false,当不指定body选项时,仅当子请求采用PUT或POST请求方式时,才会转发当前(父)请求的请求体。

简而言之,如果未指定选项正文,则可能使用当前请求的正文,因此您需要先阅读请求正文。

如您所见,这不是强制性的,因此您的情况似乎有效。

于 2017-07-26T08:01:58.120 回答