我正在使用 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>