2

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

4

3 回答 3

3

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

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

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

于 2017-05-31T10:32:53.997 回答
1

如果您在基于名称的虚拟主机上(并且每个虚拟服务器都没有有自己独立的 IP 地址),那么使用 HTTP/1.0 连接到您的虚拟主机在技术上是不可能的;只有默认服务器——定义的第一个虚拟服务器——可以访问。这是因为 HTTP/1.0 不支持 HTTP“Host”请求标头,并且在基于名称的虚拟主机上需要 Host 标头,以便“选择”将请求发送到哪个虚拟主机。在大多数情况下,对真正的 HTTP/1.0 请求的响应将是 400-Bad Request。如果您确实设法使该代码正常工作,但后来您尝试使用自定义错误文档(请参阅 Apache 核心 ErrorDocument 指令),那么阻止请求的结果将是“无限”循环:服务器将尝试使用 403-Forbidden 响应代码进行响应,并提供自定义 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$
于 2017-11-10T18:33:39.960 回答
1

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

首先启用策略模块:

a2enmod mod_policy

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

PolicyVersion enforce HTTP/1.1 

最后重启服务器:

systemctl restart apache2
于 2018-10-02T16:56:57.610 回答