獲得HTTP認證用戶名以確保跨不同Web服務器(Apache,IIS,Nginx等)的完全可移植性的最佳方式是什麼?
我的理解是,$_SERVER['REMOTE_USER']
是CGI標準,但是可以安全地假設所有的web服務器都支持這個標準嗎?
還有至少其他兩個變種:$_SERVER['PHP_AUTH_USER']
在Apache和$_SERVER['AUTH_USER']
上IIS。如果$_SERVER['REMOTE_USER']
是使用正確的變量,爲什麼這些服務器特定的變體存在?
相關線程,這僅覆蓋IIS/ColdFusion的,不*/PHP:Difference between AUTH_USER and REMOTE_USER cgi variables
關於IIS,文檔說AUTH_USER是使用的正確變量,但是REMOTE_USER總是相同的。因此,這似乎是最便攜的。 https://msdn.microsoft.com/en-us/library/ms524602(v=vs.90).aspx – HappyDog
我認爲你會好的,但請記住,MSDN文檔是指你應該期望什麼時候運行經典ASP,ASP.NET和ISAPI代碼。您可能會使用FastCGI模塊,並且將用戶憑據傳遞給PHP需要在PHP配置文件中設置「fastcgi.impersonate = 1」(默認設置爲「fastcgi.impersonate = 1」)。同樣,在Apache或nginx中使用FastCGI時,您需要確保將所需的服務器變量轉發/映射到PHP(例如,通過'fastcgi_param REMOTE_USER $ remote_user;')。 – Cahit
這聽起來可以接受,因爲這意味着如果Web服務器配置不正確,那麼默認情況下,您將不會登錄(因爲該變量未暴露給PHP)。因此,這聽起來像是一種失敗安全的方法。在此基礎上,我將繼續使用'REMOTE_USER'並忽略其他類似的便攜性較差的變量。 – HappyDog