如何告訴 Apache 回复 403 而不是 401?
我們對 s 的子樹有一些規則
Location
,包括Require
-ingldap-group
和expr
-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”。
請注意,它帶有安全警告:
安全警告
在缺少授權的情況下修改響應會削弱密碼的安全性,因為它向可能的攻擊者揭示了他猜到的密碼是正確的。