Access Control

访问控制是指控制对任何资源的访问的任何方式。这与认证和授权分开。

相关模块和指令

访问控制可以通过几个不同的模块来完成。其中最重要的是mod_authz_coremod_authz_host。本文档中还讨论了使用mod_rewrite的访问控制。

主机的访问控制

如果您希望根据访问者的主机地址来限制对网站的某些部分的访问,最简单的方法是使用mod_authz_host

Require提供了多种不同的方式来允许或拒绝对资源的访问。结合RequireAllRequireAnyRequireNone指令,可以以任意复杂的方式组合这些要求,以强制执行您的访问策略。

Warning

mod_access_compat提供的AllowDenyOrder指令已被弃用,并将在以后的版本中删除。您应该避免使用它们,并避免推荐使用过时的教程。

这些指令的用法是:

Require host address
Require ip ip.address

在第一种形式中,地址是完全限定域名(或部分域名);如果需要,您可以提供多个地址或域名。

在第二种形式中,ip.address 是 IP 地址,部分 IP 地址,网络/网络掩码对或网络/ nnn CIDR 规范。可以使用 IPv4 或 IPv6 地址。

有关此语法的更多示例,请参见mod_authz_host 文档

您可以插入not来否定特定要求。请注意,由于not是值的否定,因此不能单独使用not来允许或拒绝请求,因为* 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

可以使用RequireAllRequireAnyRequireNone指令来执行更复杂的要求集。

通过任意变量进行访问控制

使用<If>,您可以基于任意环境变量或请求 Headers 值来允许或拒绝访问。例如,要拒绝基于用户代理(浏览器类型)的访问,可以执行以下操作:

<If "%{HTTP_USER_AGENT} == 'BadBot'">
    Require all denied
</If>

使用Require expr语法,也可以写成:

Require expr %{HTTP_USER_AGENT} != 'BadBot'

Warning:

User-Agent的访问控制是一种不可靠的技术,因为最终用户一时兴起,可以将User-AgentHeaders 设置为任何内容。

有关可以使用哪些表达式语法和变量的进一步讨论,请参见表情文件

使用 mod_rewrite 的访问控制

[F] RewriteRule标志会导致发送 403 禁止响应。使用此功能,您可以基于任意条件拒绝对资源的访问。

例如,如果您希望在晚上 8 点至早上 7 点之间阻止对资源的访问,则可以使用mod_rewrite进行此操作。

RewriteEngine On
RewriteCond "%{TIME_HOUR}" ">=20" [OR]
RewriteCond "%{TIME_HOUR}" "<07"
RewriteRule "^/fridge"     "-" [F]

对于晚上 8 点之后或早上 7 点之前的任何请求,这将返回 403 禁止响应。此技术可用于您希望检查的任何条件。如果首选该方法,则也可以重定向或重写这些请求。

在 2.4 中添加的<If>指令代替了mod_rewrite传统上用来做的很多事情,您可能应该先到那里看,然后再使用 mod_rewrite。

More information

expression engine为您提供了基于任意服务器变量执行各种操作的强大功能,您应该查阅该文档以获取更多详细信息。

另外,您应该阅读mod_authz_core文档,以获取组合多个访问要求并指定它们如何交互的示例。

另请参见认证与授权操作方法。

首页