Вопрос

Я пытаюсь использовать Базовая аутентификация HTTP и последовал за примером на странице ручной 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>";
}
?>

Что случилось? Как я могу использовать базовую аутентификацию HTTP в PHP?

Это было полезно?

Решение

Как работает PHP? Если это через apache mod_cgi, я боюсь, что вы не можете получить информацию о аутентификации вообще. Apache не будет передавать его в приложения CGI, если вы не скомпилируете его с SECURITY_HOLE_PASS_AUTHORIZATION флаг. (Независимо от того, есть ли это защищенное отверстие или не зависит от того, имеют ли другие пользователи на вашем сервере более низкую или большую привилегию, чем пользователи вашего сайта.)

Если это IIS CGI, вы должны убедиться, что настроен только «анонимный доступ», или IIS попробует наступить и аутентифицировать сам учетные данные.

echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";

HTML-инъекционное отверстие безопасности (ну, если оно сработало). Использовать htmlspecialchars(). Отказ Человек, это эта страница PHP DOC полна очень сомнительного совета и кода.

Вы можете попробовать посмотреть на $_SERVER['HTTP_AUTHORIZATION'] Кроме того, хотя я подозреваю, что это проблема MOD_CGI, в этом случае ни одна из вариабе не будет присутствовать, и вам придется приберем к логинальному входу на основе cookie. Или перейдите на хост с более современным подходом к хостингу PHP, например, FastCGI или MOD_PHP.

Другие советы

Попробуй это::

<?php
    /*
    ** Define a couple of functions for
    ** starting and ending an HTML document
    */
    function startPage()
    {
        print("<html>\n");
        print("<head>\n");
        print("<title>Listing 24-1</title>\n");
        print("</head>\n");
        print("<body>\n");
    }

    function endPage()
    {
        print("</body>\n");
        print("</html>\n");
    }
    /*
    ** test for username/password
    */
    if( ( isset($_SERVER['PHP_AUTH_USER'] ) && ( $_SERVER['PHP_AUTH_USER'] == "leon" ) ) AND
      ( isset($_SERVER['PHP_AUTH_PW'] ) && ( $_SERVER['PHP_AUTH_PW'] == "secret" )) )
    {
        startPage();

        print("You have logged in successfully!<br>\n");

        endPage();
    }
    else
    {
        //Send headers to cause a browser to request
        //username and password from user
        header("WWW-Authenticate: " .
            "Basic realm=\"Leon's Protected Area\"");
        header("HTTP/1.0 401 Unauthorized");

        //Show failure text, which browsers usually
        //show only after several failed attempts
        print("This page is protected by HTTP " .
            "Authentication.<br>\nUse <b>leon</b> " .
            "for the username, and <b>secret</b> " .
            "for the password.<br>\n");
    }
?>

Для php-cgi:

в .htaccess Добавить это:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>

И в начале вашего сценария добавьте это:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

Я думаю, что методы PHP полагаются на базовую аутентификацию, настраиваемую на веб-сервере. Простой способ сделать это - включить файл .htaccess в каталоге, который вы хотите включить базовую аутентификацию.

Большинство веб-хосты на основе Unix позволяют сделать это, просто загрузка этого файла. Отдельный файл (вызов этого .htauth) проведет логины пользователя, которые могут получить доступ к сайту или каталогу.

Проверьте, если вы перевернули вашу переменную $_SERVER[‘PHP_AUTH_USER’] а также$_SERVER[‘PHP_AUTH_PW’] До места, где вы пытаетесь получить доступ к обеим переменным.

Если выше не так, то chek, если вы используете PHP в виде CGI MOD или нет. Если вы используете PHP в качестве мода CGI, то в большинстве случаев вы не получите $_SERVER[‘PHP_AUTH_USER’] а также$_SERVER[‘PHP_AUTH_PW’] потому что Generaly мы не скомпилируем Apache с вариантом SECURITY_HOLE_PASS_AUTHORIZATIONТак что если вы хотите получить обе вариабельную переменную, затем повторно скомпилируйте Apache с опцией Security_alel_Pass_authorization или вы можете использовать подход .htaccess, объясненный в PHP Basic Auth. сообщение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top