访问控制是指控制对任何资源的访问的任何方式。这与身份验证和授权是分开的。
访问控制可以通过几个不同的模块来完成。其中最重要的是mod_authz_core
和
mod_authz_host
。本文档还讨论了使用的访问控制mod_rewrite
。
如果您希望根据访问者的主机地址来限制对网站的某些部分的访问,最容易使用来完成
mod_authz_host
。
在Require
提供了多种不同的方法来允许或拒绝对资源的访问。与,和指令一起使用时RequireAll
,可以以任意复杂的方式组合这些要求,以强制执行您的访问策略。RequireAny
RequireNone
的Allow
,
Deny
和
Order
指令,提供mod_access_compat
,已被取消,就会消失在未来的版本。您应该避免使用它们,并避免推荐使用过时的教程。
这些指令的用法是:
Require host address Require ip ip.address
在第一种形式中,地址是完全限定域名(或部分域名);如果需要,您可以提供多个地址或域名。
在第二种形式中,ip.address是IP地址,部分IP地址,网络/网络掩码对或网络/ nnn CIDR规范。可以使用IPv4或IPv6地址。
有关此语法的更多示例,请参见mod_authz_host文档。
您可以插入not
以否定特定需求。请注意,由于a not
是值的取反,因此不能单独使用它来允许或拒绝请求,因为true
并不构成false。因此,要使用否定拒绝访问,该块必须具有一个评估为true或false的元素。例如,如果您有某人向您的留言板发送垃圾邮件,并且希望将其拒之门外,则可以执行以下操作:
<RequireAll> Require all granted Require not ip 10.252.46.165 </RequireAll>
来自该地址(10.252.46.165
)的访问者将看不到该指令包含的内容。相反,如果您拥有计算机名称而不是IP地址,则可以使用该名称。
Require not host host.example.com
而且,如果您想阻止来自整个域的访问,则可以仅指定地址或域名的一部分:
Require not ip 192.168.205 Require not host phishers.example.com moreidiots.example Require not host gov
使用的RequireAll
,RequireAny
和RequireNone
指令可以用来强制执行的要求更复杂的集合。
使用<If>
,您可以基于任意环境变量或请求标头值来允许或拒绝访问。例如,要基于用户代理(浏览器类型)拒绝访问,可以执行以下操作:
<If "%{HTTP_USER_AGENT} == 'BadBot'"> Require all denied </If>
使用Require
expr
语法,也可以写成:
Require expr %{HTTP_USER_AGENT} != 'BadBot'
by的访问控制User-Agent
是一种不可靠的技术,因为User-Agent
报头可以根据最终用户的要求而设置为任何值。
有关可以使用哪些表达式语法和变量的进一步讨论,请参见表达式文档。
该[F]
RewriteRule
标志导致发送403禁止响应。使用此功能,您可以基于任意条件拒绝对资源的访问。
例如,如果您希望在晚上8点至早上7点之间阻止对资源的访问,则可以使用进行此操作mod_rewrite
。
RewriteEngine On RewriteCond "%{TIME_HOUR}" ">=20" [OR] RewriteCond "%{TIME_HOUR}" "<07" RewriteRule "^/fridge" "-" [F]
对于晚上8点之后或早上7点之前的任何请求,这将返回403禁止响应。此技术可用于您希望检查的任何条件。如果首选该方法,则也可以重定向或重写这些请求。
<If>
在2.4中添加的指令代替了mod_rewrite
传统上用来做的许多事情,在使用mod_rewrite之前,您可能应该先看一下。
该表达式引擎给你权力做了各种基于任意服务器变量的东西大量,您应该咨询该文件的更多细节。
另外,您应该阅读mod_authz_core
文档以获取组合多个访问要求并指定它们如何交互的示例。
另请参阅“ 身份验证和授权”方法 。