Apache 2.4 - 允许从同一 IP 和 curl 请求进行访问

Apache 2.4 - 允许从同一 IP 和 curl 请求进行访问

我想提供对来自 apache 正在运行的同一服务器的请求和 curl 请求的访问,但这部分不起作用,无论是第一个匹配还是第二个匹配。我做错了什么?

 <LocationMatch "^/myLocation">
   <If "%{HTTP_REFERER} == 'localhost'">
     Require all granted
   </If>
   <ElseIf "%{USER_AGENT} =~ /curl/ >
     Require all granted
   </ElseIf>
   <Else>
     Require all denied
   </Else>  
 </LocationMatch>

答案1

通常,您不应该基于HTTP_REFERER标头或USER_AGENT标头来设置访问控制;两者都是由网站访问者设置的,并且不可信,任何(恶意)用户都可以操纵它们。

其次,提供对来自同一服务器的请求的访问,这在一定程度上取决于您如何发出请求。

  • 您是否正在发出请求http://localhost/myLocation- 那么请求也将来自本地主机,您可以根据 127.0.0.1 和/或 [::1] IP 地址进行访问控制。
  • 您是否向外部 IP 发出请求,即http://www.example.com/myLocation您需要添加您的外部 IP 地址。

Apache httpd 不提供 if-then-else 结构,而是提供RequireAny指令来实现你想要的:

<Location /myLocation>
   <RequireAny>
       Require ip 127.0.0.1
       Require expr %{HTTP_REFERER} == 'localhost'
       Require expr %{HTTP_USER_AGENT} =~ /curl/
   </RequireAny> 
</Location>

相关内容