Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Здравствуйте!
Каким способом лучше передавать в PHP скрипт логин и пароль с обычной
HTML формы?
То есть имеется база с логинами и паролями пользователей. Скрипт
просматривает ее всю, и если логин и пароль совпадают отдает
информацию. Вопрос: как лучше сравнивать переданный логин/пароль с
логинам/паролем в базе?

Ответить   Mon, 28 Jun 2004 09:51:00 +0300 (#180045)

 

Ответы:

Элементарный скрипт таков:
<?
if(!isset($PHP_AUTH_USER)) { // Аутентификация не проводилась, поэтому
выводим форму для ввода данных аутентификации
header('WWW-Authenticate: Basic realm="Enter site"');
header("HTTP/1.0 401 Unauthorized");
}
else { // Проверяем введённые имя и пароль пользователя на соответствие их
в базе данных
/* Здесь можно проверить переменные $PHP_AUTH_USER и $PHP_AUTH_PW на
корректность, и если эти данные введены корректно, то пытаться подключаться
к базе данных, если же в этих переменных содержатся недопустимые символы, то
завершаем работу скрипта с сообщеием об ошибке.
Только я не знаю, имеет ли смысл производить эту проверку. Может знающие
люди подскажут? */
if(mysql_connect("localhost","nameuser"))
{$id=mysql_select_db("namedb");}
if($id!=0) { // Если в результате подключения появился идентификатор
соединения с базой данных, то...
$rezquery=mysql_query("select userid, namenick, password from
users"); // ... выбираем информацию о пользователях...
if($rezquery) {
$kolvousers=mysql_num_rows($rezquery);
// ... определяем количество зарегистрированных пользователей ...
for($i=0;$i<$kolvousers;$i++)
{ // ...
просматриваем данные каждого пользователя
$info=mysql_fetch_array($rezquery);
// Проверяем соответствие введённых данных с данными
записанными в базе данных для текущего пользователя.
// В случае соответствия данных, определяем код пользователя
if($info['namenick']==$PHP_AUTH_USER and
info['password']==$PHP_AUTH_PW) {$numuser=$info['userid'];}
} // Завершение цикла проверки данных очередного пользователя
} // Завершение выполнения запроса
} // Завершение работы с базой данных
mysql_close();
if($numuser>0) {
/* Аутентификация завершена успешно, пишем необходимый программный
код */
}

C уважением, Бурляев Вячеслав

Номер выпуска : 3337
Возраст листа : 281 (дней)
Количество подписчиков : 430
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/180567
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать : mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Tue, 29 Jun 2004 09:10:22 +0600 (#180567)

 

Здравствуйте Бурляев,

Tuesday, June 29, 2004, 6:10:22 AM, вы писали:

Спасибо.
Еще вопрос: как передавать в скрипт логин и пароль, простой формой с
action=post? Если так, то с каким EncType?

Ответить   Tue, 29 Jun 2004 21:55:05 +0300 (#181170)

 

То есть как я понял, вариант со стандартной формой браузера не понравился.
Простая форма имеет примерно такой вид:

Теперь скрипт:
<?
if(!isset($entersite)) { ?> // Если не была нажата кнопка на форме, то
выводим форму
<form action="script.php" method=post>
Имя пользователя : <input type=text name=user value=""><br>
Пароль : <input type=password name=pw value=""><br>
<input type=submit name=entersite value="Вход">
</form> <?
}
else { // Обрабатываем значения, полученные из формы
/* Здесь можно проверить наличие переменных с именем и паролем. То есть
заполнены ли поля формы. Зачем лишний раз подключаться к базе данных и
гонять цикл, сравнивая все данные формы с пустыми значениями? */
if(mysql_connect("localhost","nameuser"))
{$id=mysql_select_db("namedb");}
if($id!=0) {
$rezquery=mysql_query("select userid, namenick, password from
users");
if($rezquery) {
$kolvousers=mysql_num_rows($rezquery);
for($i=0;$i<$kolvousers;$i++){
$info=mysql_fetch_array($rezquery);
if($info['namenick']==$user and info['password']==$pw)
{$numuser=$info['userid'];} // Вместо системных переменных записывем
переменные, переданные нам из формы
}
}
}
mysql_close();
if($numuser>0) {
/* Аутентификация завершена успешно, пишем необходимый программный
код */
}

Таким образом в скрипте необходимо изменить только две строчки: первую с
проверкой наличия требуемой переменной и строку с условием соответствия
переменным, переданных из формы информации из базы данных.

А EncType вообще можно опустить. Я такую беду пишу только для multipart-форм
для закачки файлов.

С уважением, Бурляев Вячеслав

Номер выпуска : 3348
Возраст листа : 282 (дней)
Количество подписчиков : 432
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/181310
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать : mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Wed, 30 Jun 2004 08:21:29 +0600 (#181310)

 

Здравствуйте Бурляев,

Wednesday, June 30, 2004, 5:21:29 AM, вы писали:

Спасибо большое!
Но вот еще вопрос: что лучше использовать для хранения информации о
пользователях (логин/пароль/другая инфа) - обычные файлы или же mySQL
базу даннных? Что будет быстрее/безопастнее на бесплатном хостинге?
Юзеров примерно под 500-600.

Ответить   Wed, 30 Jun 2004 09:15:21 +0300 (#181424)

 

Добрый день, Дмитрий!

Быстрее будут файлы (если народ не будет регистриться каждые 5 минут), надежнее
- MySql (если два юзера одновременно будут регистриться, есть шанс, что файл
с данными неправильно заблокируется, и при одновременной записи один из юзеров
потрет файл). Насчет безопасности - трудно сказать, но безопаснее база, тем более
что ответственность за безопасность базы лежит на админах, а файлы каждый как
хочет, так и защищает. Но удобнее, конечно же, база. Если вообще будет использоваться
база, так заодно уже и юзеры пусть там хранятся.

За сим прощаюсь. Юрий Истомин.

Номер выпуска : 3352
Возраст листа : 282 (дней)
Количество подписчиков : 432
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/181615
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать : mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Wed, 30 Jun 2004 14:33:42 +0400 (#181615)

 

Здравствуйте Юрий,

Wednesday, June 30, 2004, 1:33:42 PM, вы писали:

более

как

База будет, но только одна.
Поэтому думаю ее будет рациональнее использовать для другой цели, а
именно: она будет использоваться для подсчета рейтинга файлов, то есть
голосов юзверьков + просмотров.
А насчет безопастности файлов: думаю защиты их с помощью .htaccess
будет достаточно, я правильно думаю?

Ответить   Wed, 30 Jun 2004 23:41:56 +0300 (#182460)

 

Добрый день!

Так правильно - таблицу голосов завязываешь на таблицу юзеров, а в таблице юзеров
сразу и пароль хранишь, и если надо, то и права доступа.

За безопасность базы отвечает сама база, ее кривыми руками не испортишь, а вот
.htaccess админской криворукостью можно и поломать - взять да и сделать AllowOverride
None. В любом случае, защита файла через .htaccess - единственный, по-моему,
способ.

За сим прощаюсь. Юрий Истомин.

Номер выпуска : 3367
Возраст листа : 284 (дней)
Количество подписчиков : 429
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/182834
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать : mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Fri, 02 Jul 2004 13:23:48 +0400 (#182834)

 

Здравствуйте!
Может быть, имеет смысл использовать схему, предложенную в книге Ларри
Ульмана "Основы программирования на PHP":
"Пароль представляет собой данные, которые всегда необходимо шифровать...
Если зашифровать с помощью функции crypt() пароль и сохранить его в таком
виде, ...
... когда пользователь еще раз входит в систему, вводимый им пароль снова
шифруется и две зашифрованные версии сравниваются."

$CryptPassword=crypt($Password);

Номер выпуска : 3349
Возраст листа : 282 (дней)
Количество подписчиков : 432
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/181361
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать : mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Wed, 30 Jun 2004 07:57:15 +0400 (#181361)