簡體   English   中英

檢查每個頁面請求的權限,然后重定向

[英]Check permissions on every page request, then redirect

我在 apache (2.4) web 服務器上編寫了一個 web 應用程序,用戶通過 kerberos 進行身份驗證。 我的數據庫中有一個用戶表,基本權限 (r, w) 設置為 0 或 1。現在我想在每次用戶嘗試訪問此 Web 服務器上的頁面時檢查這些權限。 當用戶沒有讀取權限時,他應該被重定向到頁面“forbidden.html”。 顯然,apache 無法進行權限檢查。 所以我用php試了一下。

到目前為止我所擁有的

我已將所有 html 文件放在 apache DocumentRoot 的子文件夾 /html 中,並將其放入我的配置文件中,以便每次用戶請求 /html 中的頁面時調用 php/auth.php:

<Location /html>
    <If "%{REQUEST_URI} !~ m#\/forbidden\.html#">
            # Script checks if user should get access to the site
            SetHandler auth-script
            Action auth-script "/php/auth.php"
    </If>
</Location>

php/auth.php:

if ($params["user"]["r"] == 1) {
    // User has permission, redirect to the requested page
    header("Location: https://webapp.domain.de".$_SERVER["REQUEST_URI"]);
} else {
    // User has no permission, redirect to forbidden.html
    header("Location: https://webapp.domain.de/html/forbidden.html");
}

問題

我的問題是我得到了一個重定向循環。 似乎來自 auth.php 的 header() 的重定向再次通過 apache 的 Action 指令觸發 auth.php 腳本。 當用戶被重定向到 forbidden.html 時不會出現這種行為,因為它被排除在 conf 文件中。

我嘗試在 auth.php 中注釋掉 header(),但是 apache 不會使用 Action 指令自動為請求的站點提供服務。

有沒有辦法知道 auth.php 是否已經在這個請求中重定向了用戶並告訴 apache 不要調用腳本。 或者有沒有更好的方法來做我想要實現的目標?

提前致謝。

我做了類似的事情,根本沒有使用 Apache 指令(托管站點,不能改變任何東西)。 您不需要 Apache 重定向部分。

在每個 phtml 文件中,我做的第一個動作是需要一個類似於您的 auth.php 的 PHP 頁面。 如果 auth.php 檢測到用戶沒有該頁面的權限,我會發回一個標頭來重定向他,如下所示:

header('Location: http://www.example.com/forbidden.html');

只要確保在調用 header 之前沒有打印任何其他內容,非授權用戶將最終出現在您的位置頁面中。

如果用戶被授權,沒有標題,沒有重定向,繼續“向下”頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM