Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Http аутентификация
Форум программистов > Интернет и сети > Web-программирование > PHP программирование
GOBLIN
Народ хелп вот есть пример странички которая запрашивает логин и пароль но где указывать логин и пароль я незнаю подскажите.
Вот код


<?
$path_log = "/home/ernst/.htmyway";

// Konfigurationsfile einlesen:
$file = file($path_log);

$login = FALSE; // Gets TRUE, when login is valid
$ip = 'world'; // This is the currend IP while reading the configuration
$access = 'world'; // IP from configuration fitting into $_SERVER['REMOTE_ADDR']

foreach ($file as $zeile)
{
$zeile = trim($zeile);

switch(true)
{
case ( strlen($zeile) == 0 ): // break for empty lines
break;

case ( substr($zeile, 0, 1) == '#' ): // break for Komments
break;

case ( substr($zeile, 0, 2) == 'IP' ): // change IP range
$ip = substr($zeile, 3);
if ($ip == '')
$ip = 'world';

if ( ereg("^$ip", $_SERVER['REMOTE_ADDR']) ) // fitting IP
{
$access = $ip;
}
break;

case ( ereg("(.+)sad.gif.*)", $zeile, $reg) ): // scan passwords
$logray[$ip][$reg[1]] = $reg[2];
break;

case ( $zeile == 'ALL' ): // if no login is needet
$logray[$ip]['all'] = 1;
}
}

// <for testing>
if ( isset($_GET['logout']) )
{
unset($_SERVER['PHP_AUTH_USER']);
unset($_SERVER['PHP_AUTH_PW']);
}
// </for testing>

// authorisation test
if ( isset($_SERVER['PHP_AUTH_USER']) AND isset($_SERVER['PHP_AUTH_PW']) )
if( isset($logray[$access][$_SERVER['PHP_AUTH_USER']]) )
if( $logray[$access][$_SERVER['PHP_AUTH_USER']] == crypt($_SERVER['PHP_AUTH_PW'], (substr($logray[$access][$_SERVER['PHP_AUTH_USER']], 0, 2))) )
$login = TRUE;

if ( isset($logray[$access]['all']) )
$login = TRUE;

// send login-form if needet
if ( !$login )
{
Header("WWW-Authenticate: Basic realm=\"Test Authentication System\"");
Header("HTTP/1.0 401 Unauthorized");
echo "You must enter a valid login ID and password to access this resource\n";
exit;
}

// Your running programm...
if ( $login )
{
echo "Hello " . $_SERVER['PHP_AUTH_USER'];

?>
<BR>
<form>
<input type='submit' name='logout' value='logout'>
</form>
<?

}
?>


Где тут указывать логин и пароль ??
Как я понял надо создать библиотеку и вписать туда это
Код:

# Passwort for special IP-Range
IP 192.168.0.
axel:PGWAiIeUxcHOg
sven:ADD1IDbsVHSEo

# Following IP works without password (Keyword 'ALL')
IP 192.168.0.4
ALL

# Passwords for the rest of the world
IP
ernst:INo9dSzfU5sRU
sven:ADD1IDbsVHSEo


Или нет HELP!!!
DikMax
Если я правильно понял, то это файл в формате, что ты описал. И он должен лежать по пути указанном в $path_log

и там идет строчка 'IP ...'
и после нее идут строки 'login:password'
Причем пароль вроде как зашифрован.
GOBLIN
Значит мне надо создать файл в деректории где лежит мой пхп скрипт а файл в каком формате должен быть в .php
Зашифрованный mad.gif
DikMax
Вроде пароль шифруется вот так: $pass = crypt($original_pass)
GOBLIN
А как сделать чтобы например я сделал
Логин GOBLIN
Пароль 123

Я просто не очень в этом парю

Можеш помоч его настроить.
DikMax
Создаешь небольшой файлик

<?
  echo crypt('123');
?>


Смотришь что выводит

и потом строишь файл с паролями

IP
GOBLIN:$$$


Где $$$ - это то, что выдал первый файл
GOBLIN
А файл с паролями в каком форматье должен быть .php ??
DikMax
В текстовом
GOBLIN
Значит надо создать файл например

password.txt
И вписать туда

IP
GOBLIN:$$$

Потом создать файл

enter.php

и вписать туда
<?
echo crypt('123');
?>

А здесь написать
$path_log = "password.txt";

Вот тока я непойму где связь между файлами enter.php и password.txt

Создал небольшой файлик как ты сказал и вот что получилось
]]>http://goblin.tushino.com/echo.php]]>

Я понял этот файл работает как генератор паролей всё ок но как мне правильно построить файл с паролями чтобы ему передавалось значение файла ]]>http://goblin.tushino.com/echo.php]]>
s10
Цитата(GOBLIN @ 19:07:2006, 17:51 )
Вот тока я непойму где связь между файлами enter.php и password.txt
*



у тя щя есть твой echo.php который выводит результат шифрования ф строку. В нем к примеру пишешь так

<?php
echo crypt('123');
?>


в результате получишь
$1$HC2.Ez1.$QzukUevXX9NJQzOO0c4yv0 - так вот это и есть хэш твоего пароля (123), который (хэш) нужно записать в файл password.txt вместо $$$

Цитата
IP
GOBLIN: $1$HC2.Ez1.$QzukUevXX9NJQzOO0c4yv0


а в самом скрипте твоем поправить путь до файла
$path_log = "путь/до/password.txt"

это насколько я понял.
GOBLIN
И пароль получается будет тот что генерирует файл echo.php а логин GOBLIN

Например

Login: GOBLIN
Password: Пароль сгенерированный файлом echo.php

вот что получилось
]]>http://goblin.tushino.com/loock=close.php]]>

тока не работает всёравно.
s10
Цитата(GOBLIN @ 19:07:2006, 21:33 )
И пароль получается будет тот что генерирует файл echo.php а логин GOBLIN
*

эээ. нет. пароль надо вводить тот который ты передавал аргументом в crypt().
т.е. если (как у меня) файл password.txt такой :
Цитата
IP
GOBLIN: $1$HC2.Ez1.$QzukUevXX9NJQzOO0c4yv0


то при загрузке твоего скрипта, там где он просит лог и пароль надо в поле пароля писать 123.
если скрипт правильно работает то все будет ок.
GOBLIN
Вот вообщем получилось у меня 3 файла
1) index.php \\ Сам скрипт
2)echo.php \\ Генератор паролей
3)password.txt \\ Файл с паролем

Код файла index.php
<?
$path_log = "password.txt";

// Konfigurationsfile einlesen:
$file = file($path_log);

$login = FALSE;                    // Gets TRUE, when login is valid
$ip = 'world';                    // This is the currend IP while reading the configuration
$access = 'world';                // IP from configuration fitting into $_SERVER['REMOTE_ADDR']

foreach ($file as $zeile)
{
   $zeile = trim($zeile);

   switch(true)
   {
       case ( strlen($zeile) == 0 ):                // break for empty lines
           break;

       case ( substr($zeile, 0, 1) == '#' ):            // break for Komments
           break;

       case ( substr($zeile, 0, 2) == 'IP' ):        // change IP range
           $ip = substr($zeile, 3);
           if ($ip == '')
               $ip = 'world';

           if ( ereg("^$ip", $_SERVER['REMOTE_ADDR']) )    // fitting IP
           {
               $access = $ip;
           }
           break;

       case ( ereg("(.+):(.*)", $zeile, $reg) ):        // scan passwords
           $logray[$ip][$reg[1]] = $reg[2];
           break;

       case ( $zeile == 'ALL' ):                // if no login is needet
           $logray[$ip]['all'] = 1;
   }
}

// <for testing>
if ( isset($_GET['logout']) )
{
   unset($_SERVER['PHP_AUTH_USER']);
   unset($_SERVER['PHP_AUTH_PW']);
}
//  </for testing>

// authorisation test
if ( isset($_SERVER['PHP_AUTH_USER']) AND isset($_SERVER['PHP_AUTH_PW']) )
   if( isset($logray[$access][$_SERVER['PHP_AUTH_USER']]) )
       if( $logray[$access][$_SERVER['PHP_AUTH_USER']] == crypt($_SERVER['PHP_AUTH_PW'], (substr($logray[$access][$_SERVER['PHP_AUTH_USER']], 0, 2))) )
           $login = TRUE;

if ( isset($logray[$access]['all']) )
   $login = TRUE;

// send login-form if needet
if ( !$login )
{
   Header("WWW-Authenticate: Basic realm=\"Доступ к секретному разделу\"");
   Header("HTTP/1.0 401 Unauthorized");
   echo "Вы превысели допустимое количество попыток.\n";
   exit;
}

// Your running programm...
if ( $login )
{
   echo "Hello " . $_SERVER['PHP_AUTH_USER'];

?>
<BR>
<form>
<input type='submit' name='logout' value='logout'>
</form>
<?

}
?>



2)Код файла echo.php
<?
  echo crypt('123');
?>


3)Код файла password.txt
IP
GOBLIN: $1$oh.ip8wc$N/AGQphhThq3wVMT3ZUlH0

Посмотри всё ли тут правильно Плиз biggrin.gif

Всё залил на сервер по адресу
]]>http://goblin.tushino.com/auntification/index.php]]>

Но всё равно не работает значит гдето ошибка помоги найти

1)http://goblin.tushino.com/auntification/index.php
2)http://goblin.tushino.com/auntification/echo.php
3)http://goblin.tushino.com/auntification/password.txt
\\ Все мои файлы коды вверху
s10
.. беру свои слова назад. я не знаю как это работает.

if( $logray[$access][$_SERVER['PHP_AUTH_USER']] == crypt($_SERVER['PHP_AUTH_PW'], (substr($logray[$access][$_SERVER['PHP_AUTH_USER']], 0, 2))) )
$login = TRUE;


скажите кто нибудь, а почему в crypt() вторым аргументом стоит substr(...,0,2)
а не просто $logray[$access][$_SERVER['PHP_AUTH_USER']] ?
DikMax
Есть предположение, что и пароль нужно генерить в виде crypt('password','login').
Просто я немного не понимаю принцип действия всего этого дела.
GOBLIN
Ну тогда подскажите тоже самое токо по прше как сделать
s10
смари ]]>тут]]>

crypt - результат шифрования функции crypt ($_GET['input'], substr($pass,0,2))
pass - строка сгенереная crypt('pass','$1');

т.е. если передать в гет массив вот так вот
.../crypt.php?input=pass

то тада проверка пройдет нормально.
Цитата(DikMax @ 20:07:2006, 14:06 )
Есть предположение, что и пароль нужно генерить в виде crypt('password','login').
*

так и есть. второй параметр обязателен.
s10
2 GOBLIN
в файле password.txt надо указывать с какого ip ты заходищь.
имя пользователя и пароль.
вот к примеру у тебя какой ip?

***
2 GOBLIN
все ]]>тут]]> в архиве, читай README.
GOBLIN
s10 Спасибо огромное всё получилось тока вот косяк ты напписал чтобы не было "?logout=logout" ну вот оно было и сохранилось гдето на компе где оно лежит и как мне его удалить.

Вот ещё воопрос там когда пароль ввёл то при следуещем заходе он больше не предложит вводить пароль а просто скажет хелло .....
Как сделать чтобы он всегда запрашивал пароль.
GOBLIN
Кстати вот сатья может поймёте чо нить
]]>http://www.php.net/manual/ru/features.http-auth.php]]>
GOBLIN
Кстати помниш строчку ?logout=logout
она появлялась изза кнопки логоут а если её убрать то всё ок будет кстати после успешного ввода пароля скрипт запоминает пользователя и опредёлённое время его хранит гдето как ето убрать.

Всё чуваки спасибо вам всё получилось всё ок biggrin.gif СПАСИБО ВАМ ОГРОМНОЕ!!!!!

Без вас я бы ни когда не разобрался.

Спасибо!!!
s10
2 goblin

Насчет первого.
ничего страшного там нет.
когда запускаешь скрипт и появляется окно для ввода лога и пароля, смотри что бы строка адреса не была похожа на эту
http://goblin.tushino.com/auntification/index.php?logout=logout

или типа такого
http://goblin.tushino.com/auntification/?logout=logout

что бы в конце не было ?logout=logout. иначе не войдешь.
надеюсь где находится строка адреса ты все же знаешь.
шутка.

Второе. как оно работает с www-Authenticate незнаю. у меня дома вообще cgi стоит . а на диал апе сильно не натестишь. и вообще. читай мануал в конце концов - там про это что нить да написано. что нить типа "HTTP-аутентификация в PHP".

а чем плохо что скрипт тебя помнит? ну если все же плохо, то там кстати для этого, есть кнопка logout.
каждый раз когда выходишь жми logout. чем не вариант ? тогда он каждый раз будет запрашивать пароль при входе.

я надеюсь что этот скрипт тебе нужен ни как не меньше, чем для порабощения человеческой рассы...
иначе мне будет очень обидно.
шутка.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.