簡體   English   中英

我可以在 Apache 的幫助下實現一個透明的、基於 PHP 的身份驗證層嗎?

[英]Can I implement a transparent, PHP-based authentication layer with Apache's help?

背景

我正在為 web 站點尋找一個透明的、PHP 驅動的身份驗證層。

我知道以下簡單的方法:

HTTP認證

力學:

  • Apache 控制訪問權限;
  • 嘗試訪問給定目錄中的任何文件透明地需要 HTTP 身份驗證(如果尚未經過身份驗證)。

缺點:

  • 有限的配置選項;
  • 難以與現有用戶數據庫集成;
  • 無法控制登錄提示的視覺呈現。

基於PHP的登錄

力學:

  • PHP 控制訪問權限;
  • 嘗試訪問為系統顯式構建的任何文件(如果尚未經過身份驗證)將導致重定向到登錄頁面。

缺點:

  • 如果我忘記寫所需include "login_required.inc.php"; 或任何 PHP 文件頂部的類似文件,任何人都可以訪問該文件。

我想要的是

我想實現基於 PHP 的登錄解決方案,但以某種方式配置 Apache 以調用login_required.inc.php (或類似的)透明地作為中間步驟,當請求任何 Z2FEC392304A5C23AC138DA22847 文件時

該腳本將:

  • 跑;
  • 檢查 session 變量;
  • 告訴 Apache “是,生成請求的頁面”或“否,重定向到登錄頁面”;
  • 不需要在每個需要身份驗證的 PHP 腳本的頂部插入代碼。

這是 pipe 的夢想嗎? 或者我能做到嗎? 如果是這樣,怎么辦?

如果您通過 index.php 重寫所有 php 請求,則 index.php/php 將控制對任何內容的訪問。

RewriteRule ^(.*)$ /index.php?pageid=$1 [QSA,L]

類似的東西會將任何請求推送到 index.php,您可以在其中進行身份驗證,然后它將內容分流出來......

其中的 QSA 將保留任何查詢字符串參數等。

我認為您應該重組您的網站以使用Front Controller 幾乎每個框架都使用 FrontController 模式是有原因的:單點訪問使您的應用程序更簡單。

一種可能性是使用.htaccess ModRewrite將所有請求重定向到,例如login_required.php?redirect=<ORIGINALLY-REQUESTED-SCRIPT>

login_required.php然后可以執行其魔術並執行以下操作之一:

  • 出示登錄表格
  • include <ORIGINALLY-REQUESTED-SCRIPT>
    • 請注意, header("Location: <ORIGINALLY-REQUESTED-SCRIPT>)"; 我相信,只會再次與.htaccess並導致無限重定向循環! .htaccess ModRewrite指令設置為僅基於HTTP_REFERER的值有條件地重定向是不夠安全的。

不是首選解決方案,但有可能......

另一種可能:

只有一個入口點。 只有一個可以從外部世界訪問的文件,例如index.php?target=<REQUESTED-SCRIPT> 這一文件可以包含身份驗證邏輯並include所需的腳本。

.htaccess或簡單的文件權限將阻止所有其他文件進行外部訪問。

這是一個很好的解決方案,但是要更新整個現有系統中的所有URL 將是一個很大的變化

編輯顯然這被稱為“前端控制器”模式。

暫無
暫無

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

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