<-
Apache > HTTP Server > 文件說明 > 版本 2.4 > 操作指南/教學指南

訪問控制

提供語言:  en  |  es  |  fr 

訪問控制是指用來控制存取任何資源的方法。這與驗證與授權無關。

Support Apache!

請參閱

top

相關模組與指令

訪問控制可用幾個不同的模組來執行。其中最重要的模組是 mod_authz_coremod_authz_host。本文也會說明如何使用 mod_rewrite 來執行訪問控制。

top

依據主機進行訪問控制

如果您想依據訪客的主機位址來限制存取您網站的部分區域,可用 mod_authz_host 最容易做到這一點。

Require 指令提供多種不同的方法來允許或拒絕存取資源。結合 RequireAllRequireAny 以及 RequireNone 指令,這些必要條件可以透過各種複雜的方式結合,來執行任何訪問政策。

AllowDeny 以及 Order 指令是由 mod_access_compat 所提供,這些指令已過時,而且將會在未來的版本中移除。您應避免使用這些指令,並避免使用建議使用這些指令的過時教學指南。

這些指令的使用方式為:

Require host address
Require ip ip.address

在第一種形式中,address 是完全合格的網域名稱(或部分網域名稱);如果需要,您可以提供多個位址或網域名稱。

在第二種形式中,ip.address 是 IP 位址、部分 IP 位址、網路/網路遮罩配對,或網路/nnn CIDR 規格。可以使用 IPv4 或 IPv6 位址。

請參閱 mod_authz_host 文件 以取得關於此語法進階範例。

您可以插入 not 來否定特定需求。請注意,由於 not 是值的否定,因此無法單獨使用來允許或拒絕要求,因為非真不構成。因此,要使用否定來拒絕拜訪,則區塊必須具備可評估為真或假的元素。例如,如果您有人對您的留言板進行垃圾郵件攻擊,而您想將他們拒於門外,可以執行下列動作

<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 指令來加強一系列更複雜的要求。

top

根據任意變數進行存取控制

使用 <If>,您可以根據任意環境變數或要求標頭值允許或拒絕存取。例如,要根據使用者代理 (瀏覽器類型) 拒絕存取,您可以執行下列動作

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

透過 Require expr 語法,也可以寫成

Require expr %{HTTP_USER_AGENT} != 'BadBot'

警告

使用 User-Agent 進行存取控制是不可靠的技巧,因為 User-Agent 標頭可以隨終端使用者心意設定為任何內容。

請參閱 表達式文件 進一步說明可用的表達式語法和變數。

top

使用 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 之前,您應該先查看這項指令。

top

更多資訊

表達式引擎 能讓你根據隨意的伺服器變數來做許多事情,詳細的部分請參閱該文件。

此外,你應該閱讀 mod_authz_core 文件以了解如何結合多個存取需求並指定它們如何互動的範例。

請參閱 驗證與授權 指南。

提供語言:  en  |  es  |  fr 

top

意見

注意
這不是問答區段。在此發表的評論應針對改善文件或伺服器的建議,如果已實施或被認為無效 / 離題,可能會被我們的版主移除。關於如何管理 Apache HTTP 伺服器的問題應轉至我們在 Libera.chat 上的 IRC 頻道 #httpd,或傳送至我們的 郵遞清單