我们将 Web 应用程序从 JBoss 5.1 迁移到 7.0.9。迁移后,在特定情况下,会抛出运行时异常,如下所述,而 JBoss 5.1 中没有遇到过这种情况。我们发现,最大 http 参数有限制,默认值为 1000,以防止基于哈希冲突的 DOS 攻击。
1. 是否可以在 JBoss 7.0.9 中禁用此限制?
2。如果不能,如何得出/确定给定应用程序的最大值?
java.lang.RuntimeException: io.undertow.util.ParameterLimitException: UT000047:参数数量超过最大值1000 在 io.undertow.server.handlers.form.FormData.add(FormData.java:78) [undertow-core-1.3.31.Final-redhat-3.jar:1.3.31.Final-redhat-3] 在 io.undertow.server.handlers.form.FormData.add(FormData.java:68) [undertow-core-1.3.31.Final-redhat-3.jar:1.3.31.Final-redhat-3] 在 io.undertow.server.handlers.form.FormEncodedDataDefinition$FormEncodedDataParser.doParse(FormEncodedDataDefinition.java:172) [undertow-core-1.3.31.Final-redhat-3.jar:1.3.31.Final-redhat-3] 在io.undertow.server.handlers.form.FormEncodedDataDefinition$FormEncodedDataParser.parseBlocking(FormEncodedDataDefinition.java:251) [undertow-core-1.3.31.Final-redhat-3.jar:1.3.31.Final-redhat-3] 原因:io.undertow.util.ParameterLimitException:UT000047:参数数量超出最大值 1000 ... 还有 38 个
答案1
默认值为 1000,您可以通过添加“max-parameters”来修改该值,如下所示:
<subsystem xmlns="urn:jboss:domain:undertow:1.1">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" max-parameters="5000"/>
<host name="default-host" alias="localhost">
............ <snip> ..........
答案2
确保您的 standalone.xml 的“max-parameters”设置为 5000,例如 -
<subsystem xmlns="urn:jboss:domain:undertow:10.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other" statistics-enabled="${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" max-parameters="5000"/>
<https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
<host name="default-host" alias="localhost">
<location name="/" handler="welcome-content"/>
<http-invoker security-realm="ApplicationRealm"/>
</host>
</server>
<servlet-container name="default">
<jsp-config/>
<websockets/>
</servlet-container>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
</handlers>
</subsystem>