| |
|
|
| |
<?php
///////////////////////////////////////////////////
// Система авторизации HTTP-Basic авторизации
// 2003-2005 (C) IT-студия SoftTime (http://www.softtime.ru)
// Симдянов И.В. (simdyanov@softtime.ru)
///////////////////////////////////////////////////
// Устанавливаем соединение с базой данных
require_once("config.php");
// Если пользователь не авторизовался - авторизуемся
if(!isset($_SERVER['PHP_AUTH_USER']))
{
Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
else
{
// Утюжим переменные $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'],
// чтобы мышь не проскочила
if (!get_magic_quotes_gpc())
{
$_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
}
$_SERVER['PHP_AUTH_USER'] = str_replace("'","'",$_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = str_replace("'","'",$_SERVER['PHP_AUTH_PW']);
//вот тут мне непонятно: если "мышь" уже заэкранировали двумя строчками выше, зачем подменять ее на хомяка?:)
$query = "SELECT pass FROM $tbl_userlist WHERE name='".$_SERVER['PHP_AUTH_USER']."'";
//тут снова непонятно, почему сразу не запросить имя и пароль?
$lst = @mysql_query($query);
// Если ошибка в SQL-запросе - выдаём окно
if(!$lst)
{
Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
// Если такого пользователя нет - выдаём окно
if(mysql_num_rows($lst) == 0)
{
Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
// Если все проверки пройдены, сравниваем хэши паролей
$pass = @mysql_fetch_array($lst);
if(md5($_SERVER['PHP_AUTH_PW']) != $pass['pass'])
{
Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
//и тут непонятно: зачем нужно три if, когда можно обойтись одним?
//Можно прокомментировать?
}
?>
|
| |
| |
|
|
| |
|
|
| |
для: Loki
(04.05.2006 в 15:55)
| | | Вот то, что применяю я:
<?php
require_once("config.inc.php"); // Устанавливаем соединение с БД
function auth_req($realm = 'Admin page')
{ // Система авторизации HTTP-Basic авторизации на основе MySQL
$usertable = 'userlist'; // поля в таблице:
// id - номер пользователя
// login - запрашиваемое имя
// pass - md5(пароль)
// realm - область авторизации
if(!isset($_GET['logout']) // запрос с ?logout =1 - применяется для принудительного разрыва сессии
&& isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']))
{
$usr = $_SERVER['PHP_AUTH_USER']; $pwd = $_SERVER['PHP_AUTH_PW'];
if(get_magic_quotes_gpc())
{$usr = stripslashes($usr); $pwd = stripslashes($pwd);}
$query = "SELECT id FROM $usertable"
." WHERE login='".mysql_escape_string($usr)."'"
." AND realm='".mysql_escape_string($realm)."'"
." AND pass= '".md5($pwd)."'";
// если запрос прошел и строка подошла ровно одна
if(($res = @mysql_query($query)) != 0 && mysql_num_rows($res) == 1)
return mysql_result($res, 0); // вернем id пользователя
}
// запросим имя и пароль в случае неудачи
Header('WWW-Authenticate: Basic realm="'.$realm.'"');
Header('HTTP/1.0 401 Unauthorized');
exit("Authorization need!");
}
echo "<a href=?logout=1>User #".auth_req("Adm")." logout</a>";
?>
|
| |
| |
|
|