如何在Apache中禁用HTTP 1.0协议?

时间:2017-05-31 10:25:26

标签: apache network-protocols http-1.0

HTTP 1.0具有与会话劫持相关的安全漏洞。 我想在我的网络服务器上禁用它。

3 个答案:

答案 0 :(得分:3)

您可以在mod-rewrite子句中检查SERVER_PROTOCOL变量。请务必将此规则作为第一个规则。

RewriteEngine On
RewriteCond %{SERVER_PROTOCOL} ^HTTP/1\.0$
RewriteCond %{REQUEST_URI} !^/path/to/403/document.html$
RewriteRule ^ - [F]

!^/path/to/403/document.html$的附加否定检查是为了向用户显示禁止页面。否则会导致递归。

答案 1 :(得分:1)

如果您使用的是基于名称的虚拟主机(并且每个虚拟服务器都有自己独立的IP地址),那么从技术上讲,使用HTTP / 1.0连接到虚拟主机是不可能的;只能访问默认服务器 - 第一个定义的虚拟服务器。这是因为HTTP / 1.0不支持HTTP“主机”请求标头,并且在基于名称的虚拟主机上需要主机标头,以“选择”请求发送到哪个虚拟主机。在大多数情况下,对真正的HTTP / 1.0请求的响应将是400-Bad Request。如果您确实设法使该代码有效,但您后来尝试使用自定义错误文档(请参阅Apache核心ErrorDocument指令),那么阻止请求的结果将是一个“无限”循环:服务器将尝试使用403-Forbidden响应代码进行响应,并提供自定义403错误文档。但这会导致另一个403错误,因为访问所有资源 - 包括自定义403页面 - 被拒绝。因此,服务器将生成另一个403错误,然后尝试响应它,创建另一个403,另一个,另一个......这将继续,直到客户端或服务器放弃。

我建议像:

 SetEnvIf Request_Protocol HTTP/1\.0$ Bad_Req
 SetEnvIf Request_URI ^/path-to-your-custom-403-error-page\.html$ 
 Allow_Bad_Req
 #Order Deny,Allow
 Deny from env=BadReq
 Allow from env=Allow_Bad_Req

在mod_rewrite中,类似于:

RewriteCond %{THE_REQUEST} HTTP/1\.0$
RewriteCond %{REQUEST_URI} !^/path-to-your-custom-403-error-page\.html$

答案 2 :(得分:0)

使用mod_policy中的PolicyVersion指令,可以在Apache 2.5上实现(请注意FUTURE时态-截至2018年10月)。 PolicyVersion伪指令设置服务器,虚拟主机或目录结构接受的HTTP协议的最低级别-取决于伪指令的放置位置。

首先启用策略模块:

a2enmod mod_policy

然后在服务器配置,虚拟主机或目录中(不适用于.htaccess),添加:

PolicyVersion enforce HTTP/1.1 

最后重新启动服务器:

systemctl restart apache2