Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Авторизация пользователей в PHP

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4

Открыть новую тему     Написать ответ в эту тему

Slon



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите плиз как сделать на PHP авторизацию пользователей с запросом login`a i password`a в таком виде как тут: тут . Заранее спасибо.

Всего записей: 9 | Зарегистр. 27-08-2001 | Отправлено: 00:51 27-08-2001
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Slon
на php ты так никогда не сделаешь.
Так делается только средствами самого сервера, в данном случае Apache.
Узнай у хостера, можно ли тебе юзать .htaccess как правило на бесплатниках нельзя, но не везде.

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 06:30 27-08-2001
Slon



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
batva

Цитата:
на php ты так никогда не сделаешь.  
Так делается только средствами самого сервера, в данном случае Apache.  
Узнай у хостера, можно ли тебе юзать .htaccess как правило на бесплатниках нельзя, но не везде.

 
У меня свой сервер (Apache, W2K, PHP, MySQL) так что доступ к .htaccess есть... Я просто в данный момент тока тока начинаю работать с PHP. Если есть дельный совет, буду премного благодарен.

Всего записей: 9 | Зарегистр. 27-08-2001 | Отправлено: 10:16 27-08-2001
VolxV

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Код:
 
<?
  if(!isset($PHP_AUTH_USER)) {
    Header("WWW-Authenticate: Basic realm=\"<Бла-бла-бла\"");
    Header("HTTP/1.0 401 Unauthorized");
    echo "Пользователь надавил Cancel.\n";
    exit;
  } else {
    echo "Дружно приветствуем $PHP_AUTH_USER";
  }
?>
 



----------
Х@ен с высоким самомнением

Всего записей: 898 | Зарегистр. 01-06-2001 | Отправлено: 14:24 27-08-2001 | Исправлено: VolxV, 14:25 27-08-2001
Slon



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
 

Цитата:
<?  
  if(!isset($PHP_AUTH_USER)) {  
    Header("WWW-Authenticate: Basic realm=\"<Бла-бла-бла\"");  
    Header("HTTP/1.0 401 Unauthorized");  
    echo "Пользователь надавил Cancel.\n";  
    exit;  
  } else {  
    echo "Дружно приветствуем $PHP_AUTH_USER";  
  }  
?>  

 
Да, именно этот код я и встречал уже не однократно, но почему Apache ругается? Насколько я понимаю после запуска этой страницы должно выскочить окно с просьбой ввести login & password...
 
Помогите добить этот вопрос... или тута нужно какимто образом поднастроить Apche/PHP? Мож модуль какой не подрублен???

Всего записей: 9 | Зарегистр. 27-08-2001 | Отправлено: 15:48 27-08-2001
FatCat



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Смотря в чем задача. Если запаролить каталог, то вот решение:
 
Вот простой скриптец, правда на Perl, который ишет в любой заданный тобой каталог .htaccess и .htpassword
Я его 2 года юзаю.
 
Ставишь в Cgi, запускаешь, пишешь путь, логин/пароль и запароливаешь что надо. Не забудь только сам каталог со скриптом тоже запаролить :)
 

Код:
 
 
#!/usr/bin/perl
 
# Copyright by Floyd Morrissette Floyd@NewWebSite.com
 
# Change the following variable to the way your forms should call cgi scripts on your system
# Then just call the script from your browser and a form will be produced.
 
 
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {  ($name, $value) = split(/=/, $pair);
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ s/~!/ ~!/g;  $FORM{$name} = $value;}
 
# Change the following variable to the way your forms should call cgi scripts on your system
 
$action = "http://www.rolemancer.com/cgi-bin/password/";
 
$path = $FORM{'path'};
 
$name = $FORM{'name'};
 
$password = $FORM{'password'};
 
$newpass = crypt($password, tnnntv);
 
 
 
print "Content-type: text/html\n\n";
 
 
if ($FORM{'submit'} eq "Enter") {
&encrypt
}else{
&form
}
 
sub form{
print "<html>\n<head>\n<title>Password form</title></head>\n<body bgcolor=\"#ffffff\">\n";
print "<b>Please enter the user name and password and the path of the directory you want to protect.</b><br>\n";
print "The path should look like something like this /usr/home/website<br>\n";
print "Or perhaps something like this /ux47/0/154/public_html<br>\n";
print "Just remember it has to be the <b>absolute</b> path.<br>\n";
print "I have found out that some servers do not show you the absolute path in your ftp program, <br>&nbsp;&nbsp;so you may have to ask your hosting company what your absolute path is.<br>\n";
print "<FORM METHOD=POST ACTION=\"$action/access3.cgi\">\n";
print "User Name: <INPUT type=\"text\" NAME=\"name\" size=20><BR><br>\n";
print "Password:  <INPUT type=\"text\" NAME=\"password\" size=20><BR><br>\n";
print "Path: <INPUT type=\"text\" NAME=\"path\" size=20><BR><br>\n";
 
 
print "<input type=submit name=\"submit\" value=\"Enter\"><p>\n";
print "This script is designed to be used for only one user.<br>\n If there is already a .htaccess and .htpaswd file is the path you want to protect, then it will be overwritten with the new files that this script creates.<br>\n Each time the script is run it will overwrite any existing .htaccess and .htpasswd files that are in the path you specify.\n";
print "</body>\n</html>\n";
 
}
 
 
 
sub encrypt{
 
open (HTACCESS, ">$path/.htaccess")|| die "Content-type: text/html\n\nError opening .htaccess\n";
print HTACCESS "AuthUserFile $path/.htpasswd\nAuthName \"Access\"\nAuthType Basic\n<limit GET>\nrequire user $name\n</limit>\n";
close (HTACCESS);
 
open (PASS, ">$path/.htpasswd")|| die print "Error opening $path\n";
print PASS "$name:$newpass\n";  
close (PASS);
 
 
 
print "<html>\n<head>\n<title>Password Set</title></head>\n<body bgcolor=\"#ffffff\">\n";
print "<b>The user name and password have been written to the .htaccess and .htpasswd files.</b><br>\n";
print "<b>The user name is <i>$name</i> and the password is <i>$password</i>.<br>\n";
print "<b>The path that is protected and requires the user name and password is <i>$path</i>.<br>\n";
#print "@html";
print "</body>\n</html>\n";
 
}
 
 

 
 

Всего записей: 346 | Зарегистр. 10-07-2001 | Отправлено: 17:40 27-08-2001
FatCat



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
забыл добавить - $action/access3.cgi - смени название на название своего файла.

Всего записей: 346 | Зарегистр. 10-07-2001 | Отправлено: 17:45 27-08-2001
Slon



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FatCat
 
Спасибо, за предложение, но это не совсем то... Мне нужно именно на PHP... Я знаю что это можно сделать... И вот даже есть код:

Код:
<?  
  if(!isset($PHP_AUTH_USER)) {  
    Header("WWW-Authenticate: Basic realm=\"<Бла-бла-бла\"");  
    Header("HTTP/1.0 401 Unauthorized");  
    echo "Пользователь надавил Cancel.\n";  
    exit;  
  } else {  
    echo "Дружно приветствуем $PHP_AUTH_USER";  
  }  
?>  

 
Но при запуске у меня вылетает 500 Internal Server Error... Я думаю что проблема в следующем:

  • не подключен какойто из модулей Apache/PHP
  • неправильно сконфигурирован Apache/PHP
  • я полный ламер и делаю что-то нетак...

Всего записей: 9 | Зарегистр. 27-08-2001 | Отправлено: 17:54 27-08-2001
FatCat



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Запусти откуда-нить файл php со строкой

<? phpinfo() ?>

И посмотри какие модуля у тебя стоят.

Всего записей: 346 | Зарегистр. 10-07-2001 | Отправлено: 20:49 27-08-2001
Slon



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FatCat
PHPinfo

Всего записей: 9 | Зарегистр. 27-08-2001 | Отправлено: 20:56 27-08-2001
FatCat



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я не систадмин, посему в системе слабо разбираюсь, но вот такие модуля стоят по апачем у нас (система - FreeBSD):
 
mod_php4, mod_gzip, mod_setenvif, mod_so, mod_expires, mod_auth, mod_access, mod_alias, mod_userdir, mod_actions, mod_imap, mod_asis, mod_cgi, mod_dir, mod_autoindex, mod_include, mod_status, mod_negotiation, mod_mime, mod_log_config, mod_env, mod_charset, http_core
 
Полагаю что это либо mod_auth, либо mod_access

Всего записей: 346 | Зарегистр. 10-07-2001 | Отправлено: 23:49 27-08-2001
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Slon

Цитата:
У меня свой сервер (Apache, W2K, PHP, MySQL) так что доступ к .htaccess есть... Я просто в данный момент тока тока начинаю работать с PHP. Если есть дельный совет, буду премного благодарен.

да еще раз повторю, php тут не причем.
такая защита папки, делается средствами самого сервера.
Поэтому кстати, это самый эффективный и надежный способ.
чтобы сломать такую защиту, нужно сломать сервер.
делается все просто.
в ту папку которую нужно запаролить, кидай файл .htaccess
в нем пропиши такое

Код:
 
AuthUserFile /usr/data/.htpasswd Это любой твой путь к файлу пароля
AuthName "Access"
AuthType Basic
<limit GET>
require user VasyaPupkin
</limit>
 

Теперь положи куда то файл .htpasswd, только чтобы место где он и первая строка в вышепреведенном коде соответствовали.
в этом файле пиши так.

Код:
 
VasyaPupkin:tnK2smx2a2SxA
 

После имени и двоеточия идет закриптованный пароль.
Тоесть придумай любой пароль, потом его закриптуй, это можно сделать во многих местах рунета, есть куча вебформ, поищи.
Но крайняк заюзай скрипт который тебе дал FatCat как я вижу, он делает все тоже самое что я рассказал, создает файлы и криптует пароль, только не руками, а автоматом через веб форму.
Юзай этот скрипт, и ни о каком php не думай.

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 01:48 28-08-2001
batva



crazy administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кстати, вот и форму для криптования нашел, их море в рунете, яндекс вывалил кучу линков.
http://www.belweb.net/helpdesk/make_htaccess.php3

Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 01:56 28-08-2001
VolxV

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
batva
речь о другом способе авторизации: HTTP Authentication (PHP), а не о .htaccess-методе апача.
slon
вроде юзера надо где-то прописывать. покопаюсь - скажу где

----------
Х@ен с высоким самомнением

Всего записей: 898 | Зарегистр. 01-06-2001 | Отправлено: 07:07 28-08-2001 | Исправлено: VolxV, 07:15 28-08-2001
VolxV

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот. нашел более подробный кусок кода.
 

Код:
 
<?php
 
      function access_denied() {
          echo "401 Unauthorized: The username / password combination you entered was invalid.n";
      }
 
      function auth_headers($title) {
          Header("WWW-Authenticate: Basic realm="$title"");
          Header("HTTP/1.0 401 Unauthorized");
      }
 
      if(!isset($PHP_AUTH_USER)) {
          auth_headers("My Protected Web Page");
          access_denied();
          exit;
      }
      else {
 
          $hostname = "localhost";
          $username = "httpuser";
          $password = "MyPassword";
          $database = "members";
 
          $query = "select username,password from users where username='$PHP_AUTH_USER' and password='$PHP_AUTH_PW'";
          $link  = mysql_connect($localhost, $username, $password) or die("Unable to connect to database server");
 
          if (mysql_num_rows(mysql_db_query($database, $query)) == 0) {
              auth_headers("My Protected Web Page");
              access_denied();
              exit;
          }
          mysql_close($link);
      }
?>
 

выходит надо создать базу данных в mySQL с именем "members", в базе создать таблицу "users":

Код:
 
mysql> create database members;
mysql> create table users (
               username varchar(25) NOT NULL,
               password varchar(15) NOT NULL,
               primary key (username),
               unique username (username)
      );
 

пароль выше ограничен 15-ю символами, логин - 25. Логин уникальный
далее разрешаем пользователям доступ к таблице с localhost:

Код:
 
mysql> grant select on members.users
           to httpuser@localhost
           identified by 'MyPassword'
 

и добавляем пользователей:

Код:
 
mysql> insert into users value('Иван Иваныч', 'Пассворд Иван Иваныча');
 

 
Что-то такое

----------
Х@ен с высоким самомнением

Всего записей: 898 | Зарегистр. 01-06-2001 | Отправлено: 07:31 28-08-2001
Slon



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не чето совсем нихрена не выходит....
Базу и таблицу сделал - с этим все ок,
но вылазит 401 еррор....

[Tue Aug 28 11:23:31 2001] [error] [client 127.0.0.2] malformed header from script. Bad header=HTTP/1.0 401 Unauthorized: c:/php/php.exe

 
Может у когото есть уже работающий вариант?
Насколько я понимаю принцип:[list]
  • Создаем базу с таблицами login & password
  • Вносим в базц тестового юзера и его пароль
  • потом какимто образом(?) должны выкидывать окно login & pass такое как тут
  • После ввода логина и пароля происходит проверка с базой
  • Если ок - ok.html; Если error - просим повторить
     
    теперь решить эту проблему для меня стало делом принципа...
    Буду биться до конца...

  • Всего записей: 9 | Зарегистр. 27-08-2001 | Отправлено: 12:38 28-08-2001
    VolxV

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Slon

    Цитата:
    какимто образом(?) должны выкидывать окно login & pass  

    Вообще-то это и делается:

    Код:
    Header("WWW-Authenticate: Basic realm=\"Бла-бла-бла\"");

    покажи код "как есть"

    ----------
    Х@ен с высоким самомнением

    Всего записей: 898 | Зарегистр. 01-06-2001 | Отправлено: 13:06 28-08-2001
    Slon



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VolxV

    Цитата:
    покажи код "как есть"

    Извини, не понял?
     
    Какой код? Я взял тот код который ты предложил двумя сообщениями выше...

    Всего записей: 9 | Зарегистр. 27-08-2001 | Отправлено: 13:32 28-08-2001
    Slon



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я несколько продвинулся в этом вопросе:
     
    теперь не вылетает 500 Error... теперь вылетает нечто следующее:
    Warning: Cannot add header information - headers already sent by..........

    Всего записей: 9 | Зарегистр. 27-08-2001 | Отправлено: 17:28 28-08-2001
    Slon



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем спасибо за посильную помощь!
     
    Наконецто решил эту проблему...
     
    А проблема была в том что у меня PHP был проинстален как программа, а чтобы работали Headers() необходимо иметь PHP как модуль Apche...
     
    Если кому нужны подробности вышеуказанной проблемы пишите приватно, помогу (slon@dentel.lv)

    Всего записей: 9 | Зарегистр. 27-08-2001 | Отправлено: 00:26 29-08-2001
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4

    Компьютерный форум Ru.Board » Интернет » Web-программирование » Авторизация пользователей в PHP


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2025

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru