我想使用“限制”来允许仅来自特定网站的 GET 和 POST 访问需要身份验证的页面。我希望对来自特定 IP 的 GET 和 POST 进行身份验证,该 IP 应该无需身份验证即可访问。
<Limit GET POST>
allow from allowableSite.com
</Limit>
这不管用。一切都是未经授权的
<Limit GET POST>
allow from all
</Limit>
这也不起作用。一切仍未授权(401)
唯一能通过身份验证的是这个
<Limit GET POST>
satisfy any
</Limit>
然后,任何 GET 或 POST 都会成功……但这不是我想要的,因为我只希望从某个站点可以访问。而且“允许”没有按预期工作。是否在其他地方配置了导致此行为的某些内容?任何帮助都非常感谢。
答案1
在没有看到更多配置的情况下,这有点困难。由于Satisfy
已修复此问题,我猜想存在Require
对此位置的应用。该Satisfy any
指令使得匹配Allow
(与您的源主机)或Require
(与您的用户)将允许访问。
使用带有的主机名Allow
是初步怀疑;这取决于正向和反向 DNS 对客户端是否完美无缺。我不太清楚您所说的“仅来自某些站点”是什么意思;您需要让指令Allow
包含所有允许的客户端系统。如果所有正向和反向 DNS 都不完全符合您指定的要求,那么就会破坏它。
此外,您对 的使用<Limit>
取决于是否存在Deny from all
块外部的 来限制其他方法。因此,如果 将Order
设置为Allow,Deny
,则会破坏它。 <LimitExcept>
尽可能更好,因为您可以更明确地阻止不需要的方法;<Limit>
存在来自更高级别的意外访问的风险。
我将明确定义您可能在其他地方拥有的东西,但我想确保其他地方的某些东西不会破坏它(除了Deny
;确保更高层的东西没有多余的东西..):
Order Allow,Deny
# allowed subnet
Allow from 10.5.1.0/24
# allowed host
Allow from 86.12.76.12
AuthType Basic
AuthName "blah"
AuthUserFile /path/to/htpasswd
Require valid-user
Satisfy all
<LimitExcept GET POST>
Deny from all
</LimitExcept>