HTTP 1.0具有与会话劫持相关的安全漏洞。 我想在我的网络服务器上禁用它。
答案 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