0

こんにちは、

Web サイトのテーマに合わせて 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

2 つのオプション:

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 に答える