在 JBoss 上限制 HTTP 发布请求的大小

Posted

技术标签:

【中文标题】在 JBoss 上限制 HTTP 发布请求的大小【英文标题】:Limiting the size of a HTTP post request on JBoss 【发布时间】:2011-01-25 23:07:51 【问题描述】:

我使用 Jboss 4.2.3 作为应用服务器。有没有办法限制 JBoss 接受的 HTTP Post 请求的大小?我想限制大小以避免 DOS 攻击。

我已经在 server.xml 中设置了 maxHttpHeaderSize 和 maxPostSize,但它们似乎都没有任何区别。

【问题讨论】:

【参考方案1】:

对于 Jboss,你应该像这样在配置文件(例如:standalone-full.xml)中进行配置: ma​​x-post-size="26214400" 表示 25MB

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
        <buffer-cache name="default"/>
        <server name="default-server">
            <http-listener name="default" max-post-size="26214400" socket-binding="http" redirect-socket="https"/>
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                <filter-ref name="server-header"/>
                <filter-ref name="x-powered-by-header"/>
            </host>
        </server>
        <servlet-container name="default">
            <jsp-config/>
            <websockets/>
        </servlet-container>
        <handlers>
            <file name="welcome-content" path="$jboss.home.dir/welcome-content"/>
        </handlers>
        <filters>
            <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/>
            <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
        </filters>
    </subsystem>

【讨论】:

这适用于 WildFly,不适用于 JBoss classic。 感谢@jwenting 的反馈。我正在运行 jboss-eap-7 独立模式并且它可以工作,对于域模式我必须为 ajp-listener 设置 max-post-size。你能启发我吗? EAP7 是 Wildfly 的商业版本 :) Classic 是 JBoss4(也许是 5),它们具有完全不同的架构。它们也很旧(想想 10 多年)但仍在使用中。 再次感谢@jwenting 提供此信息。对于这个旧版本,我们应该直接查看手册或源代码。 其他 2 个答案在 10 年前做了什么 :)【参考方案2】:

maxPostSize 定义了 POST 在 Tomcat 将“自动”解析之前可以达到多大,无论这意味着什么。

如果您出于安全原因这样做,则需要三思而后行。 DOS 攻击不会方便地将其大小宣布为 HTTP 请求标头,它只会发送数据,直到您的服务器崩溃。

可以检查请求的 Content-Length 标头,如果它不存在或太大,则立即拒绝它,但是您冒着拒绝不提供标题,很多人不会。

否则,您将不得不读取请求数据,直到它超过阈值,然后然后拒绝它。

不管怎样,容器帮不了你太多。

【讨论】:

+1 并且 DDOS 攻击不仅仅是发送大数据。这也是同时发生数千个同时请求的情况。【参考方案3】:

Tomcat 接受$JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/server.xml 中的HTTP 请求,您可以将maxHttpHeaderSize 配置为Connector 标签的属性。

要控制内容,您可以实现 Valve 或 Filter

【讨论】:

以上是关于在 JBoss 上限制 HTTP 发布请求的大小的主要内容,如果未能解决你的问题,请参考以下文章

Angular - http 拦截器 - http 速率限制器 - 滑动窗口

在JBOSS eap 7中配置HTTP线程大小

iCloud GameKit 40 请求/秒限问题

GET请求的长度限制?

服务限流的作用及实现

在 Laravel 中禁用速率限制器?