如何增加单个路由的 SecRequestBodyLimit?

问题描述 投票:0回答:1

我在我的 Apache2 服务器上使用 mod security 作为 WAF。一切都工作得很好,就在我将更大的 json 数据发布到特殊路由时,WAF 将拒绝我的请求,因为正文太大 ->

SecRequestBodyLimit

我想将其限制在一个较低的水平,只是为了那条特殊的路线。我可以用什么来做到这一点?到目前为止,我在网络上找不到任何内容,只是排除某些规则的示例,但请求正文限制是没有规则的。

mod-security
1个回答
1
投票

这非常棘手。标准方法是使用

SecRequestBodyLimit
设置一个宽硬限制,然后设置一个灵活的下限,该下限在运行时检查并根据 URI 拒绝大型请求。

问题是 ModSec 2.9.x JSON 正文处理器消耗请求正文。

REQUEST_BODY
变量在第 2 阶段不可用。因此,在运行时找出整个 JSON 有多大并不容易。您可以做的是检查第 1 阶段中的
Content-Length
HTTP 请求标头并接受该标头是否足够好。

这会产生如下规则集:

SecRequestBodyLimit 1000

SecRule REQUEST_FILENAME                "@streq /path/with/large/json" \
    "id:1000,phase:1,pass,log,\
    msg:'URI with large JSON request encountered. Skipping size check',\
    skipAfter:AFTER_SIZE_CHECK"

SecRule REQUEST_HEADERS:Content-Length  "@gt 100" \
    "id:1001,phase:1,deny,log,msg:'Request too large'"

SecMarker AFTER_SIZE_CHECK

根据您的需要调整数字,并在测试后从规则

log
中删除
1000

攻击者可以通过多种方式在不设置 Content-Length 标头的情况下提交更大的请求。我建议您使用 OWASP ModSecurity 核心规则集 (CRS)。它附带了防止这种情况发生的规则。

© www.soinside.com 2019 - 2024. All rights reserved.