我正在使用Jboss 4.2.3作为应用服务器。有没有办法限制JBoss接受的HTTP Post请求大小?我想限制大小以避免DOS攻击。
我已经在server.xml中设置了maxHttpHeaderSize和maxPostSize,但它们似乎都没有任何效果。
maxPostSize
定义了Tomcat自动解析POST请求的大小限制,具体实现方式不详。Content-Length
头,如果不存在或太大,则立即拒绝该请求,但这样做有可能拒绝未提供该头的真实客户端,而许多客户端都没有提供该头。<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>
<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。