簡體   English   中英

如何在不需要身份驗證時從URL檢索嘗試的$ _SERVER ['REMOTE_USER']

[英]How to retrieve attempted $_SERVER['REMOTE_USER'] from URL when no authentication is required

通常,當公共可訪問目錄需要基本HTTP身份驗證時, $_SERVER['HTTP_AUTHORIZATION']和/或$_SERVER['REMOTE_USER'] (或$_SERVER['PHP_AUTH_USER']等)的值將被設置並可訪問PHP一旦為服務器提供了有效的用戶名/密碼組合。

例如,如果http://www.example.com/members需要基本身份驗證,並且用戶通過手動鍵入http://myusername:mypassword@www.example.com/members成功使用憑據myusernamemypassword進行身份驗證瀏覽器, $_SERVER['HTTP_AUTHORIZATION']將是這樣的:

Basic bXl1c2VybmFtZTpteXBhc3N3b3Jk

...而$_SERVER['REMOTE_USER']的值只是:

myusername

但是,如果在同一目錄中不需要身份驗證,但仍然使用其中的用戶名/密碼訪問URL,則用戶名/密碼的值似乎不會在任何地方設置(將PHP 5.3.10作為CGI /運行Apache / 2.2.22上的FastCGI)。

從PHP內部(和/或.htaccess如果需要), 當不需要身份驗證時 ,是否有辦法檢索由手動將其添加到URL的訪問者提供的用戶名(和/或密碼)的值?

TLDR; 據我所知,信息永遠不會發送到服務器,所以我聲稱這是不可能的。

如果設置了http身份驗證,則身份驗證的方式是服務器發送用戶/密碼請求(如果尚未設置),然后瀏覽器將編碼后的信息添加到Authorization標頭,並將其與請求一起發送到服務器。

如RFC 2617中所述,描述基本和摘要式身份驗證機制對於基本身份驗證,服務器發送HTTP 401 Not Authorized狀態和WWW-Authenticate頭字段以請求此信息。 RFC 2617,訪問認證框架

通過測試可以看出,如果從未在服務器上配置身份驗證,則服務器將不會從瀏覽器請求身份驗證信息,並且瀏覽器不會將用戶/傳遞信息添加到請求中。 RFC並未強制要求瀏覽器(用戶代理)不傳遞該信息,而是說

希望通過源服務器驗證自身的用戶代理 - 通常但不一定在收到401(未授權)之后 - 可以通過在請求中包含Authorization頭字段來實現。

實際上,如果您觀察發送的標頭,您可以看到,如果服務器請求此信息,則使用RFC指定的Authorization標頭以編碼形式發送。 但是,如果您沒有使用任何身份驗證,則您發送的請求似乎不包含任何形式的信息。 我自己用IE,Firefox和Chrome瀏覽器證實了這一點。


如果你想自己測試一下你的設置,可以這樣做,例如使用netcat,如下所示:

首先,在您的服務器上運行netcat:

nc -l 8888

然后從瀏覽器發出請求http://testvalue:testvalue@yourdomain:8888/

因此,從netcat輸出觀察發送到服務器的所有信息,如下所示:

GET / HTTP/1.1
Host: yourdomain:8888
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive

任何地方都沒有關於用戶或密碼的信息。 我聲稱,除非服務器請求它,否則它不會存在。

據我所知,使用http(s):// user:pass@site.com在網址中添加用戶和密碼至少已被Internet Explorer禁用了好幾年了。

https://support.microsoft.com/en-us/kb/834489

所以我不確定你想要達到的目標是否有用。 我認為瀏覽器甚至不再通過該部分網址了。

暫無
暫無

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

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