• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 访问控制

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

    相关模块和指令

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

    主机访问控制

    如果您希望根据访问者的主机地址来限制对网站的某些部分的访问,最容易使用来完成mod_authz_host

    Require提供了多种不同的方法来允许或拒绝对资源的访问。与,和指令一起使用时RequireAll,可以以任意复杂的方式组合这些要求,以强制执行您的访问策略。RequireAnyRequireNone

    AllowDenyOrder指令,提供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
    

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

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

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

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

    使用Requireexpr语法,也可以写成:

    Require expr %{HTTP_USER_AGENT} != 'BadBot'
    

    警告:

    by的访问控制User-Agent是一种不可靠的技术,因为User-Agent头文件可以根据最终用户的要求而设置为所有内容。

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

    使用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禁止响应。此技术可用于您希望检查的任何条件。如果首选该方法,则也可以重定向或重写这些请求。

    <If>在2.4中添加的伪指令代替了mod_rewrite传统上用来做的许多事情,您可能应该先诉诸于此,然后再使用mod_rewrite。

    更多信息

    该表达式引擎给你权力做了各种基于任意服务器变量的东西大量,您应该咨询该文件的更多细节。

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

    另请参阅“身份验证和授权”方法。