【问题标题】:Basic Authentication works in localhost but fails in Production Server基本身份验证在 localhost 中有效,但在生产服务器中失败
【发布时间】:2015-04-06 19:32:46
【问题描述】:

我在 PHP 中有以下代码,

<?php
ob_start();
$valid_passwords = array ("matrixUlt" => "$ecurEh1FIVE");
$valid_users = array_keys($valid_passwords);
$user = $pass = null;
if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']))
{
    $user = $_SERVER['PHP_AUTH_USER'];
    $pass = $_SERVER['PHP_AUTH_PW'];
}
$validated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
if(!$validated)
{
header('WWW-Authenticate: Basic realm="You need to be authenticated to access the resource!"');
header('HTTP/1.0 401 Unauthorized');
exit("Not authorized");
echo ob_get_clean();
}

当这个 [("matrixUlt" => "$ecurEh1FIVE"] username:password 被给出时,这在 localhost 中可以正常工作。但在 LIVE 服务器/生产环境中一直显示身份验证对话框。任何想法为什么这不起作用?

【问题讨论】:

  • 当您将$ 放在变量的双引号内时,您认为会发生什么?请改用('matrixUlt' =&gt; '$ecurEh1FIVE')
  • PHP数组中的单引号和双引号有什么区别?它在本地工作,所以它应该在现场工作!我认为问题出在其他地方。
  • 如果你把一个变量(PHP 以 $ 开头的东西)放在双引号内,PHP 会尝试把变量的内容放在那里。如果$ecurEh1FIVE 是文本而不是变量,则使用单引号。
  • @Drown - 或者更好的是,不要存储明文密码。考虑改用password_hash()
  • @webblover。您确定 PROD 的设置与 DEV 相同吗?有一些设置可能会导致 PHP_AUTH 变量无法设置:(来自:php.net/manual/en/features.http-auth.php)为了防止有人编写脚本来显示通过传统外部机制进行身份验证的页面的密码,PHP_AUTH 变量如果为该特定页面启用了外部身份验证并启用了安全模式,则不会设置。无论如何,REMOTE_USER 可用于识别经过外部验证的用户。因此,您可以使用 $_SERVER['REMOTE_USER']。

标签: php basic-authentication


【解决方案1】:

对整个混乱和混乱感到抱歉,我正在在生产中运行 CGI/FastCGI。因此,不可能在运行此 FastCGI 的 PHP 中使用 HTTP AUTHENTICATION

这个 StackOverflow 答案给了我提示 https://stackoverflow.com/a/7053320/1786360 ;我没有注意到php手册中的这个东西,因为它在那里丢失了。

【讨论】:

  • 那么,对于像我这样在 CGI/FastCGI 服务器 API 中运行 脚本的用户,有什么解决方案呢?我想在这里进行 Http 身份验证。有人有什么建议或想法可以帮助我吗?
【解决方案2】:

检查你的服务器是否设置了 PHP_AUTH_USER 和 PHP_AUTH_PW 如果没有,那么对话框将继续要求它 要解决这个问题,您需要在 .htaccess 中添加以下代码

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 

希望它能解决您的问题。

【讨论】:

    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 2013-12-21
    • 1970-01-01
    相关资源
    最近更新 更多