限制JBoss上HTTP POST请求的大小

4

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

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

3个回答

2
maxPostSize定义了Tomcat自动解析POST请求的大小限制,具体实现方式不详。
如果您出于安全考虑使用这个功能,需要再三考虑。DOS攻击不会方便地在HTTP请求头中宣布其大小,而是会一直发送数据直到服务器崩溃。
您可以检查请求的Content-Length头,如果不存在或太大,则立即拒绝该请求,但这样做有可能拒绝未提供该头的真实客户端,而许多客户端都没有提供该头。
否则,您只能读取请求数据,直到它超过一个阈值,然后拒绝它。
无论哪种方式,容器都不能为您提供太多帮助。

1
+1 和 DDOS 攻击不仅仅是发送大量数据,还包括同时发生数千个请求。 - BalusC

2
对于Jboss,您应该在配置文件(例如:standalone-full.xml)中进行配置,如下所示:max-post-size="26214400" 意味着25MB。"Original Answer"的翻译是"最初的回答"。
<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经典版。 - jwenting
感谢@jwenting的反馈。我正在运行独立模式的jboss-eap-7,它可以正常工作,但对于域模式,我必须为ajp-listener设置max-post-size。您能否给我指点一下? - Jerry
EAP7是Wildfly的商业版本 :) Classic是JBoss4(也许是5),其具有完全不同的架构。它们也非常古老(想象10年以上),但仍在使用中。 - jwenting
感谢@jwenting再次提供这个信息。对于这个旧版本,我们应该直接查看手册或源代码。 - Jerry
这就是其他两个答案10年前所做的 :) - jwenting

0
假设我们有一个 Undertow 模块的默认独立配置设置,将 max-post-size 设置为 10mb。有关 RedHat 的文档。
<subsystem xmlns="urn:jboss:domain:undertow:12.0" default-virtual-host="default-host" statistics-enabled="true">
            <buffer-cache name="default"/>
            <server name="default-server" default-host="default-host">
                <http-listener name="http" socket-binding="http" max-parameters="20000" allow-unescaped-characters-in-url="true" proxy-address-forwarding="true" enable-http2="true"/>
                <host name="default-host" alias="localhost">
                    <filter-ref name="samesite-cookie"/>
                    <filter-ref name="hsts-header"/>
                    <filter-ref name="x-frame-options"/>
                    <filter-ref name="x-xss-protection"/>
                    <filter-ref name="x-content-type-options"/>
                    <filter-ref name="gzipfilter"/>
                    <http-invoker security-realm="ApplicationRealm"/>
                </host>
            </server>
...

要将max-post-size变量更改为所需的任何变量,我们可以连接到JBOSS CLI并执行以下命令来更新配置。如果您不知道如何连接到JBOSS CLI,这里是官方文档

/subsystem="undertow"/server="default-server"/http-listener="http":write-attribute(name=max-post-size,value=11534336)

一旦命令被执行,您的独立配置应该如下所示:

<subsystem xmlns="urn:jboss:domain:undertow:12.0" default-virtual-host="default-host" statistics-enabled="true">
            <buffer-cache name="default"/>
            <server name="default-server" default-host="default-host">
                <http-listener name="http" socket-binding="http" max-post-size="11534336" max-parameters="20000" allow-unescaped-characters-in-url="true" proxy-address-forwarding="true" enable-http2="true"/>
                <host name="default-host" alias="localhost">
                    <filter-ref name="samesite-cookie"/>
                    <filter-ref name="hsts-header"/>
                    <filter-ref name="x-frame-options"/>
                    <filter-ref name="x-xss-protection"/>
                    <filter-ref name="x-content-type-options"/>
                    <filter-ref name="gzipfilter"/>
                    <http-invoker security-realm="ApplicationRealm"/>
                </host>
            </server>
...

这意味着现在 max-post-size 被设置为 11mb。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接