За последние 24 часа нас посетили 17709 программистов и 1606 роботов. Сейчас ищут 1036 программистов ...

Авторизация на PHP: три попытки

Тема в разделе "PHP для новичков", создана пользователем Qwe1, 3 дек 2007.

  1. Qwe1

    Qwe1 Активный пользователь

    С нами с:
    1 дек 2007
    Сообщения:
    10
    Симпатии:
    0
    Как сделать файл со скриптом, подключение которого ведет к появлению окна с вводом логина и пароля, причем, пользователю дается три попытки ввести данные, после чего надо вывести страницу 403. При нажатии кнопки ОТмена - тоже можно вывести страницу 403. Пробую так:
    PHP:
    1.  
    2. <?
    3. function authenticate() {
    4.   Header("WWW-Authenticate: Basic realm=\"Admin center\"");
    5.   Header("HTTP/1.0 401 Unauthorized");
    6.   exit("Авторизация отменена!");
    7. }
    8.  
    9. session_register("attempt");
    10. $auth = $attempt = 0;
    11.  
    12. do
    13. {
    14.   if(!isset($PHP_AUTH_USER))
    15.     authenticate();
    16.   else
    17.   {
    18.     foreach(file($_SERVER["DOCUMENT_ROOT"]."/admin/passw/passw") as $k)
    19.     {
    20.       if(trim($k) == "$PHP_AUTH_USER $PHP_AUTH_PW")  
    21.       {
    22.         $auth = 1;
    23.         break;
    24.       }
    25.     }
    26.     if(!$auth)
    27.     {
    28.       $attempt++;
    29.       authenticate();
    30.     }
    31.   }
    32. }
    33. while($attempt < 3 && !$auth);
    34.  
    35. session_unregister("attempt");
    36. unset($attempt);
    37. unset($auth);
    38. ?>
    39.  
     
  2. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    session_register устарел.
    Вместо него используйте глобальный массив $_SESSION
    Попробуйте:
    PHP:
    1.  
    2. <?
    3.  function authenticate() {
    4.    Header("WWW-Authenticate: Basic realm=\"Admin center\"");
    5.    Header("HTTP/1.0 401 Unauthorized");
    6.    exit("Авторизация отменена!");
    7.  }
    8.  
    9. $_SESSION['auth'] = 0;
    10. $_SESSION['attempt'] = 0;
    11.  do
    12.  {
    13.    if(!isset($PHP_AUTH_USER))
    14.      authenticate();
    15.    else
    16.    {
    17.      foreach(file($_SERVER["DOCUMENT_ROOT"]."/admin/passw/passw") as $k)
    18.      {
    19.        if(trim($k) == "$PHP_AUTH_USER $PHP_AUTH_PW")  
    20.        {
    21.          $_SESSION['auth'] = 1;
    22.          break;
    23.        }
    24.      }
    25.      if(!$_SESSION['auth'])
    26.      {
    27.        $_SESSION['attempt']++;
    28.        authenticate();
    29.      }
    30.    }
    31.  }
    32.  while($attempt < 3 && !$auth);
    33.  $_SESSION['attemt'] = '';
    34.  $_SESSION['auth'] = '';
    35.  ?>
    36.  
     
  3. Qwe1

    Qwe1 Активный пользователь

    С нами с:
    1 дек 2007
    Сообщения:
    10
    Симпатии:
    0
    1) Почему устарел?
    2) А как все-таки ограничить ввод, задав число попыток? А то в моем примере можно вводить неверный логин/пароль до бесконечности!
    3) Как вместо exit("Авторизация отменена!"); выдать страницу 403? Простая замена этой строки на Header("HTTP/1.0 403 Forbidden"); не помогает.
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Ну а если я напишу бота, который не будет поддерживать сессии или разрывать коннект после каждой попытки?
     
  5. hazer_pn

    hazer_pn Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    5
    Симпатии:
    0
    скажите плиз
    есть имя пользователя и пароль
    если они верны то при нажатии на login отправить его на другую страницу
    если нет то через echo вывести сообщение об ошибке
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в чем вопрос?

    Код (Text):
    1. if($name == $correct_name && $pass == $correct_pass) // условие конечно сами напишите
    2. {
    3. header('Location: другая_страница');
    4. }
    5. else
    6. {
    7. echo 'сообщение об ошибке';
    8. }
     
  7. hazer_pn

    hazer_pn Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    5
    Симпатии:
    0
    сенкс все пролучилоси