未考虑 Httpd LimitRequestFieldSize

未考虑 Httpd LimitRequestFieldSize

我在配置 httpd 以接受较大的 SPNEGO 身份验证标头时遇到问题。请求在授权标头行至少为 5674 字节时工作正常,但在授权标头超过 6178 字节时中断,答案如下:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Size of a request header field exceeds server limit.</p>
</body></html>

服务器日志中出现以下错误(调试级别)

[Thu Aug 23 07:26:31 2018] [error] [client x.x.x.x] request failed: error reading the headers

以下是我们激活的服务器信息页面的摘录,以确保 LimitRequestFieldSize 足够高

129: LimitRequestBody 52428800
130: LimitRequestFields 50
131: LimitRequestFieldsize 40960
132: LimitRequestLine 40960

该服务器运行的是 RHEL 6.7,带有库存 httpd 服务器

$ httpd -V
Server version: Apache/2.2.15 (Unix)
Server built:   Mar  3 2015 12:06:14
Server's Module Magic Number: 20051115:25
Server loaded:  APR 1.3.9, APR-Util 1.3.9
Compiled using: APR 1.3.9, APR-Util 1.3.9
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

答案1

在装有 Apache 2.4 的 Ubuntu 18.04 LTS 机器上,我修改了该文件:

/etc/apache2/conf-可用/httpd.conf

根据文档https://httpd.apache.org/docs/2.4/mod/core.html

# https://askubuntu.com/questions/340792/size-of-a-request-header-field-exceeds-server-limit-due-to-many-if-none-match-va
# default is 8k see https://httpd.apache.org/docs/2.4/mod/core.html
LimitRequestFieldSize 32768
# default is 100 
LimitRequestFields 200

并重启服务器。你可能需要修改一下设置

答案2

编辑您的虚拟主机并检查有关请求大小的限制。

您可以检查 httpd.h 中的默认值(例如 DEFAULT_LIMIT_REQUEST_FIELDSIZE)

例子 :

<VirtualHost ...>
    ServerName www.mysite.com
    ...
    #HTTP Request
    LimitRequestFieldSize 32768
    LimitRequestFields 200 
    LimitXMLRequestBody 0
    ...
</VirtualHost>

更多信息请访问 :https://httpd.apache.org/docs/2.4/fr/mod/core.html

答案3

如果您将 LimitRequest 指令放入服务器配置中,则必须将这些指令插入到 VirtualHost 配置之前。

相关内容