VotoN
11.06.2010, 18:42
Всем привет.
На сайте действует HTTP-авторизация, привязанная к MySQL-базе. Вот ее код:
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");
// Если пользователь не авторизовался - авторизуемся
if(!isset($_SERVER['PHP_AUTH_USER']))
{
Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
echo 'Авторизация отменена';
exit();
}
else
{
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 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");
echo 'Такого пользователя нет';
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");
echo 'Неправильный пароль';
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");
echo 'Неправильный пароль';
exit();
}
Суть вот в чем - нужно, чтобы после 5 неудачных попыток ввода пароля выводилось сообщение "Система блокирована, зайдите попозже" и устанавливались куки в систему сроком на час.
Пробовал вставить в последний кусок кода вот эту конструкцию:
$value = "UB_AUTH_OK";
setcookie("Auth", $value, time()+3600); /* 1 час */
$loc = ($_REQUEST['from']);
header ("Location: ".$loc);
Куки ставятся и доступ блокируется на час, но после первой же неудачной попытки и сообщение не выводится о том, что система блокирована. Куда поставить счетчик или цикл для 5 попыток, так и не удалось догнать :(
Кто шарит, помогите разобраться, плиз.
На сайте действует HTTP-авторизация, привязанная к MySQL-базе. Вот ее код:
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");
// Если пользователь не авторизовался - авторизуемся
if(!isset($_SERVER['PHP_AUTH_USER']))
{
Header("WWW-Authenticate: Basic realm=\"Admin Page\"");
Header("HTTP/1.0 401 Unauthorized");
echo 'Авторизация отменена';
exit();
}
else
{
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 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");
echo 'Такого пользователя нет';
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");
echo 'Неправильный пароль';
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");
echo 'Неправильный пароль';
exit();
}
Суть вот в чем - нужно, чтобы после 5 неудачных попыток ввода пароля выводилось сообщение "Система блокирована, зайдите попозже" и устанавливались куки в систему сроком на час.
Пробовал вставить в последний кусок кода вот эту конструкцию:
$value = "UB_AUTH_OK";
setcookie("Auth", $value, time()+3600); /* 1 час */
$loc = ($_REQUEST['from']);
header ("Location: ".$loc);
Куки ставятся и доступ блокируется на час, но после первой же неудачной попытки и сообщение не выводится о том, что система блокирована. Куда поставить счетчик или цикл для 5 попыток, так и не удалось догнать :(
Кто шарит, помогите разобраться, плиз.