Apache-2.4

如何告訴 Apache 回复 403 而不是 401?

  • February 1, 2017

我們對 s 的子樹有一些規則Location,包括Require-ingldap-groupexpr-s。

使用者受到適當的挑戰,以提供經過驗證的登錄憑據。

但是,即使憑據正確並且由於其他原因(例如屬於錯誤的組或來自不正確的 IP 地址)而拒絕訪問,伺服器的響應始終是 401,而不是 403。

結果,瀏覽器不斷提示使用者“再試一次”……我可以告訴 Apache(2.4)使用 403,如果Authorization-header 中提供的資訊簽出,並且它是其他一些規則,拒絕要求?

再次,我知道,為什麼身份驗證成功後,某些使用者的授權被拒絕 - 它應該是。我只需要與這些使用者溝通,即:“是的,我們相信你就是你所說的那個人,但你不被允許訪問這個位置。”

看來,mod_rewrite 是引發 403 響應的唯一方法—— mod_rewrite 表達式是否可以檢查 LDAP 組的成員資格或強制將狀態從 401 更改為 403?

我在WebMaster 的網站上問過這個問題,但沒有得到答案——那裡的人似乎更注重內容

這是我目前配置的相關片段:

<Location /foo>
        Require ldap-group CN=foo,OU=Groups,DC=example,DC=net
</Location>

當驗證提供的使用者名/密碼,但不滿足要求時,我需要返回 403… 401 目前正在返回。

我認為您想要的是AuthzSendForbiddenOnFailure

AuthzSendForbiddenOnFailure On

上下文:目錄,.htaccess

如果身份驗證成功但授權失敗,Apache HTTPD 將預設以“401 UNAUTHORIZED”的 HTTP 響應程式碼進行響應。這通常會導致瀏覽器再次向使用者顯示密碼對話,這並不是在所有情況下都需要的。AuthzSendForbiddenOnFailure 允許將響應程式碼更改為“403 FORBIDDEN”。

請注意,它帶有安全警告:

安全警告

在缺少授權的情況下修改響應會削弱密碼的安全性,因為它向可能的攻擊者揭示了他猜到的密碼是正確的。

引用自:https://serverfault.com/questions/829955