The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Как ставить пароль, !*! Akmal, 11-Авг-06, 11:03  [смотреть все]
Написал на php страничку, вход в которую возможен только после ввода пароля, кроме того имеются три пары логин/пароля от которого зависят содержимое странички.
Код такой:
<?
header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: post-check=0, pre-check=0",false);
header("Pragma: no-cache");
session_cache_limiter("public, no-store");
session_start();

function http_auth()
{
   $_SESSION['AUTH'] = 1;
    header('HTTP/1.0 401 Unauthorized');
    header('WWW-Authenticate: Basic realm="Welcome to company"');
    // The actions to be done when the user clicks on 'cancel'
    echo "Unauthorized";
    exit();
}
          
if( !isset($_SERVER['PHP_AUTH_USER']) or @$_SESSION['AUTH'] != 1 )
{
    http_auth();
    exit();
}            

echo "<html>";
echo "<head>";
echo "<META http-equiv='content-type' content='text/html; charset=windows-1251'>";
echo "<link rel=stylesheet href=../set/bill.css type='text/css'>";

$login_pass_file = file("/usr/local/apache/secret/userpass");
foreach ($login_pass_file as $login_pass) {
    list($login,$pass) = explode(';',rtrim($login_pass));
}
if ($_SERVER['PHP_AUTH_USER']=="login1" && $_SERVER['PHP_AUTH_PW']=="pass1") {
    $ip=$login;
    $ip_pw=$pass;
    $adv_table=0;
} elseif ($_SERVER['PHP_AUTH_USER']=="login2" && $_SERVER['PHP_AUTH_PW']=="pass2") {
    $ip=$login;
    $ip_pw=$pass;
    $adv_table=1;
} else {
    exit();
}
...
echo "content_of_site";
?>

Сегодня обнаружил, что когда на диалоговом окне нажимаешь Отмена, затем из браузера Назад, а потом опять идешь по ссылке страница открывается без запроса пароля.
Как это запретить?????

  • Как ставить пароль, !*! weris, 10:19 , 14-Авг-06 (1)
    >Как это запретить?????

    ставить и проверять куки??

  • Как ставить пароль, !*! shep, 00:40 , 23-Авг-06 (2)
    >Написал на php страничку, вход в которую возможен только после ввода пароля,
    >кроме того имеются три пары логин/пароля от которого зависят содержимое странички.
    >
    >Код такой:
    >function http_auth()
    >{
    !2>   $_SESSION['AUTH'] = 1;
    >    header('HTTP/1.0 401 Unauthorized');
    !1>    header('WWW-Authenticate: Basic realm="Welcome to company"');
    >    // The actions to be done when the
    >user clicks on 'cancel'
    >    echo "Unauthorized";
    >    exit();
    >}
    (кут)
    >
    >Сегодня обнаружил, что когда на диалоговом окне нажимаешь Отмена, затем из браузера
    >Назад, а потом опять идешь по ссылке страница открывается без запроса
    >пароля.
    >Как это запретить?????


    Всё очень просто.
    В месте !1 ты объявляешь заголовок аутентификации. Поэтому прошла она или нет, параметр PHP_AUTH_USER заполняется. И я так подозреваю что в случае "Отмена-Назад-Вперед" она заполняется пустой строкой. Но пустая строка это всё-таки isset($var). Поэтому ты по сути два раза (см. !2) делаешь одну и ту же проверку.

    Можно проверку заменить. В голову приходит два варианта:
    1. if( empty($_SERVER['PHP_AUTH_USER']) )
      здесь есть два ньюанса.
        - Во-первых в случае error_reporting(E_ALL & E_NOTICE) ты получишь замечание что индекс PHP_AUTH_USER не определен при первом заходе на страницу. Обходится так:
          if (!isset($_SERVER['PHP_AUTH_USER']) || empty($_SERVER['PHP_AUTH_USER']))...
        )
        - Во-вторых ... а кто его знает, мало ли - есть фича/бага прохождения аутентификации с пустым логином. Обходится проверкой логина.
          if ( !myCheckLogin($_SERVER['PHP_AUTH_USER']) )...,
          где myCheckLogin($str) это что-то вроде return in_array($str, $correctLogins);

    2. таки использовать $_SESSION['AUTH']. Т.е.
    if ($_SERVER['PHP_AUTH_USER']=="login1" && $_SERVER['PHP_AUTH_PW']=="pass1") {
        $ip=$login;
        $_SESSION['AUTH'] = 1;
        ...
    ,... для других паролей то же самое
        а в проверке:
        if ( !isset($_SESSION['AUTH']) || ( -1 != $_SESSION['AUTH'] ) )...отказ

    Надеюсь что-то можно разобрать... может быть не очень понятно объяснил, могу показать на полном коде. l4igem(два)(кусака)list(тчк)ру




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру