無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

PHP ? HTTP ?

header() ??? "Authentication Required" ????????? ?????????????? ??????? ?????PHP ???? URL ??? ??? PHP_AUTH_USER ? PHP_AUTH_PW ? PHP_AUTH_TYPE ??? ?????????? ???? $_SERVER $HTTP_SERVER_VARS ??? "Basic" ?? "Digest" ? (PHP 5.1.0 ?) ???????? header()??

: PHP ??

$_SERVER ?? PHP » 4.1.0 ???????

???????????

1 Basic HTTP ??

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    
header("WWW-Authenticate: Basic realm=\"My Realm\"");
    
header("HTTP/1.0 401 Unauthorized");
    echo 
"?????\n";
    exit;
} else {
    echo 
"<p>??{$_SERVER['PHP_AUTH_USER']} </p>";
    echo 
"<p>??{$_SERVER['PHP_AUTH_PW']} ??????</p>";
}
?>

2 Digest HTTP ??

?? Digest HTTP ????????? ??? ????» RFC 2617 ??

<?php
$realm 
'Restricted area';

//user => password
$users = array('admin' => 'mypass''guest' => 'guest');


if (empty(
$_SERVER['PHP_AUTH_DIGEST'])) {
    
header('HTTP/1.1 401 Unauthorized');
    
header('WWW-Authenticate: Digest realm="'.$realm.
           
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');

    die(
'?????');
}


// PHP_AUTH_DIGEST ?
if (!($data http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||
    !isset(
$users[$data['username']]))
    die(
'?!');


// ?????
$A1 md5($data['username'] . ':' $realm ':' $users[$data['username']]);
$A2 md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$valid_response md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);

if (
$data['response'] != $valid_response)
    die(
'?!');

// OK, ???????
echo '???????: ' $data['username'];

// http auth ???
function http_digest_parse($txt)
{
    
// ???
    
$needed_parts = array('nonce'=>1'nc'=>1'cnonce'=>1'qop'=>1'username'=>1'uri'=>1'response'=>1);
    
$data = array();
    
$keys implode('|'array_keys($needed_parts));

    
preg_match_all('@(' $keys ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@'$txt$matchesPREG_SET_ORDER);

    foreach (
$matches as $m) {
        
$data[$m[1]] = $m[3] ? $m[3] : $m[4];
        unset(
$needed_parts[$m[1]]);
    }

    return 
$needed_parts false $data;
}
?>

: ???

HTTP?????????????? ?????? "Basic" ?? ?"B"?????realm?(???) ?????HTTP/1.0 401 ?? 401 ?? 1???? ???????? ???????

PHP_AUTH_USERPHP_AUTH_PW ?????????? ??? ????? dbm ? ??????????

Internet Explorer ?????? ??????????? HTTP/1.0 401 ? WWW-Authenticate ???

??????? ??????????? ???????? ?? ?? PHP_AUTH ???? ??????? REMOTE_USER ??? $_SERVER['REMOTE_USER'] ?????

:

PHP ????????? AuthType ?????????

????????URL?? ????URL??????????

??? 401 ???Netscape Navigator Internet Explorer ??????? ??????"" ???????????? "?" ??"" ????

3 ? / ???? HTTP ??

<?php
function authenticate() {
    
header('WWW-Authenticate: Basic realm="Test Authentication System"');
    
header('HTTP/1.0 401 Unauthorized');
    echo 
"??????ID????????\n";
    exit;
}

if (!isset(
$_SERVER['PHP_AUTH_USER']) ||
    (
$_POST['SeenBefore'] == && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
    
authenticate();
} else {
    echo 
"<p>Welcome: " htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "<br />";
    echo 
"Old: " htmlspecialchars($_REQUEST['OldAuth']);
    echo 
"<form action='' method='post'>\n";
    echo 
"<input type='hidden' name='SeenBefore' value='1'>\n";
    echo 
"<input type='hidden' name='OldAuth' value=\"" htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "\" />\n";
    echo 
"<input type='submit' value='Re Authenticate'>\n";
    echo 
"</form></p>\n";
}
?>

??HTTP Basic ????????? ?????Lynx ???? Lynx ??? 401 ????? ????back ?? forward ??? ???????????? '_' ???????????

IIS CGI ? PHP ??? HTTP ????? IIS "?????" "?" ?? "??" ???? ?????????

: IIS ??:
IIS HTTP ????PHP cgi.rfc2616_headers ????0 (??) ?? ???

:

?? ?? WWW-Authenticate? realm??? uid ??



powered by SEO.CUG.NET