0

晕那里,

我需要更改 WWW-Authenticate 弹出框的外观/设计以匹配我的网站主题,当用户需要登录到安全页面时,我不希望它显示默认的身份验证弹出框。下面是我用来创建 WWW-Authenticate 弹出窗口的 PHP 脚本。

<?php

$_user_ = 'test';
$_password_ = 'test';

session_start();

$url_action = (empty($_REQUEST['action'])) ? 'logIn' : $_REQUEST['action'];
$auth_realm = (isset($auth_realm)) ? $auth_realm : '';

if (isset($url_action)) {
if (is_callable($url_action)) {
    call_user_func($url_action);
} else {
    echo 'Function does not exist, request terminated';
};
};

function logIn() {
global $auth_realm;

if (!isset($_SESSION['username'])) {
    if (!isset($_SESSION['login'])) {
        $_SESSION['login'] = TRUE;
       header('WWW-Authenticate: Basic realm="'.$auth_realm.'"');
       header('HTTP/1.0 401 Unauthorized');
        echo 'You must enter a valid login and password';
        echo '<p><a href="?action=logIn">Try again</a></p>';
        exit;
    } else {
        $user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '';
        $password = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '';
        $result = authenticate($user, $password);
        if ($result == 0) {
            $_SESSION['username'] = $user;
        } else {
            session_unset($_SESSION['login']);
            errMes($result);
            echo '<p><a href="?action=logIn">Try again</a></p>';
            exit;
        };
    };
 };
}

function authenticate($user, $password) {
global $_user_;
global $_password_;

if (($user == $_user_)&&($password == $_password_)) { return 0; }
else { return 1; };
}

function errMes($errno) {
   switch ($errno) {
    case 0:
        break;
    case 1:
        echo 'The username or password you entered is incorrect';
        break;
    default:
        echo 'Unknown error';
};
}

function logOut() {

session_start();
session_destroy();
header("Location: index.html");

}

?>

以下是我在需要保护或保护的所有页面中使用的代码。

<?php
require_once 'auth.php';
echo "You've logged in as {$_SESSION['username']}<br>";
echo '<p><a href="?action=logOut">LogOut</a></p>'
?>

请帮助...记住代码工作正常我只想改变外观。感谢先进:)

4

2 回答 2

1

两种选择:

Javascript

提交表单时使用javascript以http://username:password@domain.com的形式构造一个url,将document.location设置为构造的url,浏览器将在自动身份验证的同时重定向。

服务器端

允许表单提交给自身并使用服务器端代码执行相同的重定向 - 我建议使用 307 重定向。

在 php 中:

redirect("http://username:password@domain.com", 307);

缺点

如果初始用户名和密码提交不正确,这两个版本仍然会导致 Web 浏览器显示丑陋的身份验证框。

如果您需要避免这种情况,那么您将需要实现自己的服务器端身份验证方案。

更多详情

如果你能告诉我你认为你会喜欢哪个选项,我可以展示更多的示例代码。

安全隐患

使用 HTTP 基本身份验证存在安全隐患。如果您不使用 SSL,则密码将以明文形式发送。使用上述方法将以明文形式发送密码作为 URL 的一部分。还有其他安全隐患:

https://security.stackexchange.com/questions/988/is-basic-auth-secure-if-done-over-https

因此,我总是建议不要使用 http 基本身份验证。许多用户可能对敏感帐户使用相同的密码,因此即使是基本的身份验证系统也值得花一点时间。

于 2013-01-31T15:21:22.657 回答
0

您无法更改弹出框的样式。您必须在您的网站上创建自己的登录表单。

于 2013-01-31T15:01:12.357 回答