Автор Тема: Проблемы с авторизацией  (Прочитано 12616 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с авторизацией
« : 22 Января 2004, 22:55:01 »
Привет всем!Помогите пожалуйста со скриптом авторизации.
foreach(file("passw/parol") as $k)
{
if(substr($k,0,-2)=="$PHP_AUTH_USER $PHP_AUTH_PW")
{
$rez=1;
}
}
if (rez!=1)
{Header("WWW-Authenticate: Basic realm=\\"Закрытая зона\\"");
Header("HTTP/1.0 401 Unauthorized");
exit;
}
?>
Создал файл с паролями(parol) в формате
login1 parol1
login2 parol2
Проблема:вписываю в выскакивающую табличку логин с паролем,а он их не принимает=0 Проверял $k (echo-м) - считывает нормально.Подскажите пожалуйста,в чём загвостка?Заранее очень признателен.
P.S. Windows XP,файл с паролями создавал в Блокноте
P.S.S.Прошу ногами сильно не пинать

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Проблемы с авторизацией
« Ответ #1 : 22 Января 2004, 23:13:57 »
две совершенно стандартные ошибки.
чтобы отловить первую, сделай логин и проль из одной буквы.
и напиши
echo strlen($k);
думаю, дальше догадаешься сам.

вторая.
обратись к своему скрипту так
file.php?rez=1;

как только их исправишь, я тебе дам готовый правильный код

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Проблемы с авторизацией
« Ответ #2 : 22 Января 2004, 23:19:42 »
а, вижу, ты обрезаешь.
Только вместо субстра надо использовать trim

Тогда другая ошибка. напиши-ка
echo $PHP_AUTH_USER;

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с авторизацией
« Ответ #3 : 23 Января 2004, 23:26:33 »
Насколько я понял,различий между trim и substr(в том виде как я его писал)-нет?Пока пробовал вывести $PHP_AUTH_USER (так и несмог его вывести,но наверно там должно быть пусто,т.к. табличка выскакивает после того,как rez!=0,наверное) пришла мысль о том,что в самом начале скрипта или до него надо вывести заголовок о Авторизации.Я прав?

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с авторизацией
« Ответ #4 : 23 Января 2004, 23:31:05 »
Дополнение: а как его вывести?

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Проблемы с авторизацией
« Ответ #5 : 24 Января 2004, 00:17:17 »
Цитировать

различий между trim и substr(в том виде как я его писал)-нет?

есть. не факт, что отрезать надо именно два символа - а не три или один.
поэтому надо делать трим.

Цитировать
не смог его вывести

естественно.
Не одна хрестоматийная ошибка - так другая :-)
Цитировать
наверно там должно быть пусто,т.к. табличка выскакивает после того,как rez!=0,наверное

Должно быть, но совсем не поэтому.
В этой переменной вообще ничего не должно быть - ни до  выскакивания таблички, ни после.
Тем более, что после "выскакивания" и ввода пароля твой скрипт начинает работу заново, уже с переданным ему паролем.
Вот только лежит он в совсем другой пременной.
$PHP_AUTH_USER - это устаревшее и не работающее написание.
правильно писать
$_SERVER[\'PHP_AUTH_USER\']
и точно так же - вторую, с паролем.
Цитировать
Дополнение: а как его вывести?

А очень просто -
Цитировать
Berkut:
Header("WWW-Authenticate: Basic realm=\\"Закрытая зона\\"");
Header("HTTP/1.0 401 Unauthorized");
exit;

Только тебе этого делать, естественно, не надо, поскольку ты и так уже выводишь.

Вот. как это должно выглядеть:

$file
="data.txt"
$fp=fopen($file"r"); 
$auth_file=fread($fpfilesize($file)); 
fclose($fp); 
if (!
strstr($auth_file,"\\n".$_SERVER[\'PHP_AUTH_USER\'].":".$_SERVER[\'PHP_AUTH_PW\'])) { 
  header(\'WWW-Authenticate: Basic realm="Realm"\'); 
  header("HTTP/1.0 401 Unauthorized"); 
  echo  "Bad password"; 
  exit; 
}

Никаких циклов, переменных, которые можно подделать - и так далее.

Этот код лучше всего вынести в отдельный файл и поддключать через require в самом начале защищаемых файлов.

файл с паролями ОБЯЗАТЕЛЬНО должен быть недоступен для скачивания через браузер. Либо лежать в каталоге, недоступном пользователю веб-сервера, либо закрыт средстваи сервера, либо еще как-то.
А еще для надежности желательно кодировать в этом файле пароли в md5, и сверять с MD5($_SERVER[\'PHP_AUTH_PW\'])

Вопросы есть? :-)

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с авторизацией
« Ответ #6 : 24 Января 2004, 01:46:34 »
Вопросов туча.
Я так понял,в твоём скрипте файл с паролями должен писаться в формате
user:password
2. Скопировал твой скрипт-неработает!такая-же беда,что и до этого-непринимает пароль

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Проблемы с авторизацией
« Ответ #7 : 24 Января 2004, 02:15:02 »
ну так отлаживай
выводи на экран, смотри глазами.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Проблемы с авторизацией
« Ответ #8 : 24 Января 2004, 02:17:22 »
гммм.
я тут малость напортачил
if (!strstr("\\n".$auth_file,"\\n".$_SERVER[\'PHP_AUTH_USER\'].":".$_SERVER[\'PHP_AUTH_PW\'])) {

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Проблемы с авторизацией
« Ответ #9 : 24 Января 2004, 18:51:38 »
Цитировать
if (rez!=1)

Надо бы поменять на
Цитировать
if ($rez!=1)
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с авторизацией
« Ответ #10 : 24 Января 2004, 21:39:07 »
RomikChef - твой новый вариант тоже не работает!!!
А AlieN вроде нашёл ошибку!Вот я облажался,тупился в свой сценарий 2 дня и не заметил!Только вот ещё вопрос:пароль то он принимает,при не верном реагирует адекватно,но после ввода пароля не выдаёт пустую страницу!?Ведь после авторизации он должен выдавать всё,что стоит после сценария?
P.S.Спасибо большое всем за внимание к моей проблеме.

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с авторизацией
« Ответ #11 : 24 Января 2004, 21:40:39 »
Опечатка:выдаёт именно пустую страницу.

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Проблемы с авторизацией
« Ответ #12 : 24 Января 2004, 22:55:58 »
Berkut
А тебя после кода аутентификации ещё что-то есть?
Потому что если ничего нету, после аутентификации оно и будет тебе выводить пустую страницу :)
А вообще в самом начале напиши
error_reporting(E_ALL);
ini_set(\'display_errors\', 1);
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с авторизацией
« Ответ #13 : 25 Января 2004, 00:04:59 »
После скрипта авторизации у меня идёт обычный ХТМЛ.
Включил эти 2 строчки " error_reporting(E_ALL);
ini_set(\'display_errors\', 1); " и вот какой ужас он мне выдаёт:

Warning: Undefined variable: PHP_AUTH_USER in c:\\www\\www1\\index.php on line 6  - 6 раз подряд


Warning: Undefined variable: rez in c:\\www\\www1\\index.php on line 8

Warning: Cannot add header information - headers already sent by (output started at c:\\www\\www1\\index.php:6) in c:\\www\\www1\\index.php on line 9

Warning: Cannot add header information - headers already sent by (output started at c:\\www\\www1\\index.php:6) in c:\\www\\www1\\index.php on line 10

Оффлайн Berkut

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с авторизацией
« Ответ #14 : 25 Января 2004, 00:09:45 »
Очень смущает первая ошибка,ведь без error_reportig авторизовывается нормально - т.е. определяет PHP_AUTH_USER

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28