防止 Apache 反向代理某些 HTTP 方法

防止 Apache 反向代理某些 HTTP 方法

我正在使用 apache 作为 ruby​​ on rails 应用程序服务器的反向代理。当使用非标准 HTTP 方法收到 HTTP 请求时,这会导致应用程序服务器出现错误,从而暴露有关环境的一些(次要)详细信息。除非 HTTP 方法与安全的标准方法之一匹配,否则我可以阻止 apache 转发请求吗?

[编辑]

以 Shane 的回答为指导,我得出了以下内容,在此发布以供参考。

RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST|OPTIONS)
RewriteRule .* - [R=405,L]

我发现否定检查更容易,允许 apache 返回正确的响应代码(405 是方法不允许),并且意味着所有代理配置内容都保持不变(即您可以使用 ProxyPass 或 ProxyPassMatch)

答案1

应该能够通过以下方式实现这一点<Limit>

<Limit GET HEAD POST>
  ProxyPass / http://example.com/
</Limit>

编辑:

挑剔的指令..我们将采用 B 计划。

RewriteCond %{REQUEST_METHOD} ^(GET|HEAD|POST)$
RewriteRule ^/(.*)$ http://example.com/$1 [P,L]

答案2

如果使用 Apache 反向代理,则可以通过使用指令来允许所有 HTTP 方法:

<VirtualHost *:80>
    ServerName ....com

    <Proxy "*">
     Order deny,allow
     Allow from all
     AllowMethods GET PUT DELETE POST
    </Proxy>

    ProxyPass    ...
</VirtualHost>

相关内容