【发布时间】:2015-10-22 14:32:53
【问题描述】:
通常当一个可公开访问的目录需要基本的 HTTP 身份验证时,一旦有效的用户名/密码组合具有已提供给服务器。
例如,如果http://www.example.com/members 需要基本身份验证,并且用户通过在浏览器中手动键入http://myusername:mypassword@www.example.com/members 使用凭据myusername 和mypassword 成功进行身份验证,$_SERVER['HTTP_AUTHORIZATION'] 的值将类似于:
Basic bXl1c2VybmFtZTpteXBhc3N3b3Jk
...$_SERVER['REMOTE_USER'] 的值将是:
myusername
但是,如果在同一目录中不需要身份验证,但仍使用其中的用户名/密码访问 URL,则似乎没有在任何地方设置用户名/密码的值(运行 PHP 5.3.10作为 Apache/2.2.22 上的 CGI/FastCGI)。
从 PHP 内部(和/或 .htaccess,如果需要),当不需要身份验证时,有没有办法检索用户名(和/或密码)的值是由手动添加到 URL 的访问者提供的?
【问题讨论】:
-
如果 401 标头不需要它,它可能不会被 Apache 转发到 PHP
-
我刚做了一个测试页,
PHP_AUTH_USER和PHP_AUTH_PW都设置在$_SERVER数组中,即使不需要身份验证。 -
@Phil Hmm... 这让我想知道我正在使用的这个特定设置是否缺少 Apache 模块或其他东西。如果是这样的话,会是哪一个?此外,如果您发送不必要的用户/通行证凭据,
PHP_AUTH_USER和PHP_AUTH_PW是否会包含已发送的那些值? -
@Phil 我也做了一个测试页,这些值似乎不在任何地方。在这里使用 FastCGI,PHP 5.4.41。您使用的是什么服务器 API 和 PHP 版本? OP 也可以添加该信息。
标签: php .htaccess authentication http-authentication