我尝试使用Basic HTTP Authentication并遵循PHP手册页上的示例。但它对我不起作用。变量$_SERVER['PHP_AUTH_USER']
似乎没有设置。当用户尝试登录时,用户会被提示新的登录对话框。服务器运行PHP 5.3.3,我尝试使用Google Chrome和Internet Explorer。
下面是我使用的简单示例:
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Jonas Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'User pressed Cancel';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as you password.</p>";
}
?>
字符串
我如何在PHP中使用基本HTTP身份验证?
6条答案
按热度按时间r1zk6ea11#
试试这个:
字符串
368yc8dk2#
对于PHP-CGI:
在.htaccess中添加以下内容:
字符串
然后在脚本的开头添加以下内容:
型
xvw2m8pv3#
PHP是如何运行的?如果是通过Apache mod_cgi,恐怕你根本无法获得身份验证信息。Apache不会将其传递给CGI应用程序,除非你用
SECURITY_HOLE_PASS_AUTHORIZATION
标志编译它。(这是否真的是一个安全漏洞取决于你服务器上的其他用户是否比你网站的用户拥有更低或更高的权限。)如果是IIS CGI,则必须确保只配置了“匿名”目录访问,否则IIS将尝试介入并验证凭据本身。
字符串
HTML注入安全漏洞(如果它能工作的话)。使用
htmlspecialchars()
。伙计,PHP文档页面充满了高度可疑的建议和代码。你也可以尝试看看
$_SERVER['HTTP_AUTHORIZATION']
,虽然我怀疑这是mod_cgi的问题,在这种情况下,两个变量都不存在,你将不得不求助于基于cookie的登录,或者改变到一个更现代的PHP托管方法的主机,如FastCGI或mod_php。np8igboo4#
我认为PHP方法依赖于Web服务器上配置的基本身份验证。一个简单的方法是在您想要启用基本身份验证的目录中包含一个.htaccess文件。
大多数基于unix的web主机允许你上传这个文件,一个单独的文件(称为.htauth)将保存允许访问站点或目录的用户登录。
sycxhyv75#
检查你是否在试图访问变量
$_SERVER[‘PHP_AUTH_USER’]
和$_SERVER[‘PHP_AUTH_PW’]
的地方之前覆盖了这两个变量。如果以上不是这种情况,那么检查一下你是否使用php作为cgi mod。如果你使用php作为cgi mod,那么在大多数情况下,你不会得到
$_SERVER[‘PHP_AUTH_USER’]
和$_SERVER[‘PHP_AUTH_PW’]
,因为一般来说,我们不会用SECURITY_HOLE_PASS_AUTHORIZATION
选项编译apache。所以如果你想得到这两个变量,那么用SECURITY_HOLE_PASS_AUTHORIZATION选项重新编译apache,或者你可以使用.htaccess方法。7vhp5slm6#
如果您的**$_SERVER变量中没有PHP_AUTH_USER和PHP_AUTH_PW**,则需要检查PHP_AUTH_DIGEST,如下所述:https://www.php.net/manual/en/features.http-auth.php
检查示例#2。