【问题标题】:how to change design /style of the WWW-Authenticate popup box to match my website theme?如何更改 WWW-Authenticate 弹出框的设计/样式以匹配我的网站主题?
【发布时间】:2013-01-31 14:10:02
【问题描述】:

晕,

我需要更改 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>'
?>

请帮助...记住代码工作正常我只想更改外观。高级感谢:)

【问题讨论】:

    标签: php html css www-authenticate


    【解决方案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 基本身份验证。许多用户可能对敏感帐户使用相同的密码,因此即使是基本的身份验证系统也值得花一点时间。

    【讨论】:

    • 请注意,在太多垃圾邮件发送者/网络钓鱼者使用诸如 www.your.bank.example.com:enter@spam-host 之类的 URL 后,某些浏览器不喜欢包含身份验证信息的重定向/链接/... .example.com/some/long/path
    • @michaelward82 非常感谢您的反馈,我更喜欢 javascript 选项,如果您对此提供帮助,我将非常感激。没有什么我要保护的,它只有 3 个 html 页面,其中包含只有家人才能看到的仪式相册……所以我认为我不会为了保护没人关心的图像而加倍努力见...
    • 您是否正在使用或愿意使用 javascript 框架(jQuery 等)? jQuery 代码比 vanilla javascript 简单得多...
    • 抱歉还没贴代码,最近比较忙。我今天会尝试发布代码。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-13
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多