[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Авторизация на сайте
Ketrin1708
Доброго времени суток всем.
У меня есть скрипт авторизации, однако он работает не совсем так, как мне нужно.

Файл auth.php

<?
/********************************************/
/*Welcome to Auth Script source-code!*/
/*The Auth Script and its functions, contexture are copyrighted by s1ayer [www.spg.arbse.net]*/
/*Current file: auth.php*/
/*Optimized for PHP 4.3.6, Apache 1.3.27*/
/********************************************/
header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

$AUTH_PATH = "auth_script"; //путь к папке со скриптом (следуя из корня сайта)

$PATH_MOD = $_SERVER['DOCUMENT_ROOT']."/".$AUTH_PATH;
include "$PATH_MOD/config.php";
include "$PATH_MOD/functions.php";
include "partners.inc";
$users_db = file ("$PATH_MOD/users-db.php");
$loged = false;
if (isset($_REQUEST['auth']))
{
SWITCH ($_REQUEST['auth']){
CASE ("login"):
$login = @$_POST['login'];
$password = @$_POST['password'];
$redirect = @$_POST['redirect'];
if ($login != "" and $password != "")
{
if ($allow_ip_ban == true)
{
$log_open = file ("$PATH_MOD/log-db.php");
$counter_try = 0;
for ($i=1; $i<count($log_open); $i++)
{
list ($login_try, $pass_try, $time_try, $ip_try)=explode ("=>", trim($log_open[$i]));
if (getenv("REMOTE_ADDR") == $ip_try and time()-$time_try < $time_ban)
{
$counter_try++;
}
if ($counter_try == $max_try or isset($_COOKIE['goodbye']))
{
setcookie ("goodbye", uniqid(""), time()+$time_ban, "/");
die("ВНИМАНИЕ: Вы израсходовали все попытки входа в систему! Повторите попытку через $time_ban секунд");
}
}
}
for ($i=1; $i<count($users_db); $i++)
{
list ($user_id, $user_p, $user_mode)=explode("=>", trim($users_db[$i]));
if ($login == $user_id and md5($password) == $user_p)
{
setcookie ("userID", "$i=>$user_p=>".md5($user_id)."", time()+$cookie_lt, "/");
if ($redirect == "")
{$redirect = $_SERVER['PHP_SELF'];}
header ("Location: $redirect");
exit;
}
if ($i == count($users_db)-1)
{
$login = str_replace ("=>", "[exp_rep]", $login);
$password = str_replace ("=>", "[exp_rep]", $password);
$login = htmlspecialchars($login);
$password = htmlspecialchars($password);
$fopen = fopen ("$PATH_MOD/log-db.php", "a+");
flock ($fopen, LOCK_EX);
fputs ($fopen, "$login=>$password=>".time()."=>".getenv("REMOTE_ADDR")."\r\n");
flock ($fopen, LOCK_UN);
fclose ($fopen);
}
}
if ($redirect != "")
{die("Подлиность вашей аутентификации не подтверждена!");}
}
BREAK;
CASE ("logout"):
setcookie ("userID", "", time()+1, "/");
header("Location: ".$_SERVER['PHP_SELF']."");
BREAK;
}
}
if (isset($_COOKIE['userID']))
{
@list ($user_str, $user_cp, $user_md5)=explode ("=>", $_COOKIE['userID']);
if ($user_str != "" and $user_cp != "")
{
@list ($user_id, $user_p, $user_mode)=explode("=>", trim($users_db[$user_str]));
if ($user_cp == $user_p)
{
$loged = true;

if (@$_REQUEST['auth'] == "dump")
{
if (user_validate($user_mode))
{
$file = @$_REQUEST['file'];
$format = @$_REQUEST['format'];
$file_name = ereg_replace ("(.*)\/", "", $file);
$file_name = str_replace (".php", "", $file_name);
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$file_name.$format");
if ($format == "txt")
{
$fopen = fopen ($file, "a+");
$content = fread ($fopen, filesize($file));
fclose ($fopen);
print $content;
}
else
{
$fopen = file ($file);
print "<tt><b>Dump file generated at ".date("d.m.Y (H:i)")." by Auth Script | File: <u>$file</u></b></tt><br><br><textarea cols=50 rows=8>";
for ($i=0; $i<count($fopen); $i++)
{
print "".htmlspecialchars(trim($fopen[$i]))."\r\n";
}
print "</textarea>";
}
exit;
}
}
?>
<?if ($allow_styles == true){?>
<!--Auth Script HTML Block-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; CHARSET=Windows-1251">
<style>
BODY {
FONT-SIZE: 8pt; COLOR:black; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica, sans-serif
}
TD {
FONT-SIZE: 8pt; COLOR:black; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica, sans-serif
}
IMG {
border-style: hidden; border: 0; margin-left:1mm;
}
A:link {
FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR:Royalblue; FONT-FAMILY: Verdana; TEXT-DECORATION: none
}
A:active {
FONT-WEIGHT: normal; FONT-SIZE: 8pt; FONT-FAMILY: Verdana; TEXT-DECORATION: none
}
A:visited {
FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR:Royalblue; FONT-FAMILY: Verdana; TEXT-DECORATION: none
}
A:hover {
FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR:black; FONT-FAMILY: Verdana; TEXT-DECORATION: underline
}
A.cr:visited {
FONT-SIZE: 8pt; COLOR:gray; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica, sans-serif; TEXT-DECORATION: underline
}
A.cr:link {
FONT-SIZE: 8pt; COLOR:gray; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica, sans-serif; TEXT-DECORATION: underline
}
</style>
</head>
<body>
<?}?>
<script>
function del_wind(url, fid) {
var x = confirm("Вы действительно хотите очистить БД "+fid+" ?");
if (x == true){
window.location=url;
}
}
</script>
<font color=gray><a class=cr href=<?=$_SERVER['PHP_SELF']?>>Auth Script v 0.5</a> developed by s1ayer [<a class=cr href=http://www.spg.arbse.net>http://www.spg.arbse.net</a>]</font><br><br>
<table align=center width=100% style="border: black 1px solid"><tr><td>Auth CP: <a href=?auth=add>Добавить пользователя</a> | <a href=?auth=delete>Удалить пользователя</a> | <a href=?auth=chp>Сменить пароль</a> | <a href=?auth=log>LOG - файл</a> | <a href=?auth=db>БД пользователей</a> | <a href=?auth=logout>Выход (<?=$user_id?>)</a></td></tr></table>

<?if (isset($_REQUEST['auth']))
{
print "<br><table align=center width=100% style=\"border: black 1px dashed\"><tr><td align=center>";
switch ($_REQUEST['auth']){
case ("add"):
if (user_validate($user_mode))
{
print "<form action=?auth=add&done method=post><table align=center><tr><td>Имя пользователя: </td><td><input type=text name=nlogin></td></tr><tr><td>Пароль: </td><td><input type=password name=npass></td></tr><tr><td>Права: </td><td><select name=umode><option value=A>Administrator</option><option value=M>Moderator</option></select></td></tr></table><br><i nput type=submit value=Добавить></form>";
if (isset($_REQUEST['done']))
{
$nlogin = @$_POST['nlogin'];
$npass = @$_POST['npass'];
$umode = @$_POST['umode'];
$message = "";
if ($nlogin == "" or $npass == "" or $umode == "")
{$message .= "Заполнены не все поля формы! ";}
if (ereg("[а-яА-Я\"'=><\? ]", $nlogin) or ereg("[а-яА-Я\"'=><\? ]", $npass))
{$message .= "В логине и/или пароле присутствуют запрещенные символы [=, >, <, ?, \", ' SPACE, CYRILLIC] ! ";}
$users_array = array();
for ($i=1; $i<count($users_db); $i++)
{
$elems = explode ("=>", $users_db[$i]);
$users_array[] = $elems[0];
}
if (in_array($nlogin, $users_array))
{$message .= "Такой пользователь '$nlogin' уже существует! ";}
if ($message == "")
{
$fopen = fopen ("$PATH_MOD/users-db.php", "a+");
flock ($fopen, LOCK_EX);
fputs ($fopen, "$nlogin=>".md5($npass)."=>$umode\r\n");
flock ($fopen, LOCK_UN);
fclose ($fopen);
print "Пользователь $nlogin успешно добавлен!";
}
else
{print $message;}
}
}
break;
case ("delete"):
if (user_validate($user_mode))
{
if (isset($_REQUEST['done']))
{
$duser = @$_POST['duser'];
$message = "";
for ($i=1; $i<count($users_db); $i++)
{
list ($user_id_db, $user_p_db, $user_mode_db)=explode("=>", trim($users_db[$i]));
if ($duser == $user_id)
{
$message = "Вы хотите удалить самого себя? Зачем?";
}
if ($duser == $user_id_db)
{unset($users_db[$i]);}
if ($i == count($users_db)-1)
{
$message = "Пользователя с таким именем не существует!";
}
}
if ($message == ""){
$fopen = fopen ("$PATH_MOD/users-db.php", "w");
flock ($fopen, LOCK_EX);
fputs ($fopen, implode ("", $users_db));
flock ($fopen, LOCK_UN);
fclose ($fopen);
print "Пользователь $duser успешно удален!";
}else
{print $message;}

}
print "<form action=?auth=delete&done method=post><select name=duser>";
for ($i=1; $i<count($users_db); $i++)
{
list ($user_id_db, $user_p_db, $user_mode_db)=explode("=>", trim($users_db[$i]));
if ($user_id != $user_id_db)
{
print "<option value=$user_id_db>$user_id_db</option>";
}
}
print "</select><br><br><input type=submit value=Удалить></form>";
}
break;
case ("chp"):
print "<form action=?auth=chp&done method=post><table align=center><tr><td>Старый пароль: </td><td><input type=text name=old_pass></td></tr><tr><td>Новый пароль: </td><td><input type=password name=new_pass></td></tr></table><br><input type=submit value=Изменить></form>";
if (isset($_REQUEST['done']))
{
$old_pass = @$_POST['old_pass'];
$new_pass = @$_POST['new_pass'];
$message = "";
if (md5($old_pass) != $user_p)
{$message .= "Старый пароль подтвержден неверно! ";}
if (ereg("[А-Яа-я=\"'><\? ]", $new_pass))
{$message .= "В пароле присутствуют запрещенные символы [=, >, <, ?, \", ', SPACE, CYRILLIC] ! ";}
if ($new_pass == "")
{$message .= "Вы не ввели новый пароль! ";}
if ($message == "")
{
for ($i=1; $i<count($users_db); $i++)
{
if ($i == $user_str)
{
$users_db[$i] = "$user_id=>".md5($new_pass)."=>$user_mode\r\n";
}
}
$fopen = fopen ("$PATH_MOD/users-db.php", "w");
flock ($fopen, LOCK_EX);
fputs ($fopen, implode("", $users_db));
flock ($fopen, LOCK_UN);
fclose ($fopen);
print "Ваш пароль успешно изменен!<br>Чтобы изменения вступили в силу, нажмите кнопку ниже.<form action=?auth=login method=post><input type=hidden name=login value=$user_id><input type=hidden name=password value=$new_pass><input type=hidden name=redirect value=?auth=chp><input type=submit value=Завершить></form>";
}
else
{print $message;}
}
break;
case ("log"):
if (isset($_REQUEST['do']))
{
if (user_validate($user_mode))
{
$fopen = fopen ("$PATH_MOD/log-db.php", "w");
fputs ($fopen, "<?die();?>\r\n");
fclose ($fopen);
print "БД LOG_FILE(log-db.php) успешно очищена!";
}
}
$log_open = file ("$PATH_MOD/log-db.php");
print "<p align=left><tt>";
for ($i=1; $i<count($log_open); $i++)
{
list ($log_user, $log_pass, $log_time, $log_ip)=explode ("=>", $log_open[$i]);
print "<u>User:</u> $log_user<br><u>Password:</u> $log_pass<br><u>Time:</u> ".date("d.m.Y (H:i)", $log_time)."<br><u>IP:</u> $log_ip<br>---------------<br>";
}
print "</tt><br>Зарегистрировано попыток входа: <b>".(count($log_open)-1)."</b><br><a href=\"javascript:del_wind('?auth=log&do=clean','LOG_FILE (log-db.php)')\">Очистить LOG</a> | Dump in: <a href=?auth=dump&file=$PATH_MOD/log-db.php&format=html>HTML</a> or <a href=?auth=dump&file=$PATH_MOD/log-db.php&format=txt>TXT</a></p>";
break;
case ("db"):
if (user_validate($user_mode))
{
print "<p align=left><a href=\"javascript:del_wind('?auth=db&do=clean','DB_FILE (users-db.php)')\">Очистить БД</a> | Dump in: <a href=?auth=dump&file=$PATH_MOD/users-db.php&format=html>HTML</a> or <a href=?auth=dump&file=$PATH_MOD/users-db.php&format=txt>TXT</a></p>";
if (isset($_REQUEST['do']))
{
$fopen = fopen ("$PATH_MOD/users-db.php", "w");
fputs ($fopen, "<?die();?>\r\n");
fclose ($fopen);
print "БД LOG_FILE(users-db.php) успешно очищена!";
}

}
break;
}
print "<p align=left><a href=?>hide menu</a></p></td></tr></table>";
}
if (isset($_REQUEST['fix_db_error']))
{
print "<br>Warning: 'db_error' occurred. Status: fixed";
}
if ($allow_styles == true){print "\r\n</body></html>\r\n<!--/Auth Script HTML Block-->";}
?>

<? }
else
{
$loged = false;
for ($i=1; $i<count($users_db); $i++)
{
list ($user_id_db, $user_p_db, $user_mode_db)=explode("=>", trim($users_db[$i]));
if (md5($user_id_db) == $user_md5 and $user_p_db == $user_cp)
{
setcookie ("userID", "$i=>$user_p_db=>".md5($user_id_db)."", time()+$cookie_lt, "/");
if ($_SERVER['QUERY_STRING'] == "")
{$fix_q = "?fix_db_error";}
else
{$fix_q = $_SERVER['REQUEST_URI']."&fix_db_error";}
header ("Location: $fix_q");
exit;
}
}
die("Произошла ошибка в системе! Невозможно подтвердить подлиность вашей аутентификации! Возможно, произошел сбой БД.<br><form action=?auth=login method=post><input type=hidden name=redirect value=".$_SERVER['REQUEST_URI']."><br>Login: <input type=text name=login><br>Password: <input type=password name=password><br><input type=submit value=Login></form><br>*После повторной авторизации вы будете направлены на предыдущую страницу");
}
}

}
else
{$loged = false;}
if ($loged == false)
{
if (@$_POST['login'] != "" and @$_POST['password'] != "")
{
$message = " onload=\"alert('Неверный логин или пароль!')\"";
}
if (isset($_POST['login']) and isset($_POST['password']) and (@$_POST['login'] == "" or $_POST['password'] == ""))
{
$message = " onload=\"alert('Заполнены не все поля формы!')\"";
}
die ("
<html>
<head>
<title>Вход в систему</title>
</head>
<body".@$message.">
<form action=?auth=login method=post><table><tr><td>Login:</td> <td><input type=text name=login></td></tr><tr><td>Password:</td> <td><input type=password name=password></td></tr></table><input type=submit value=Login></form>
</body>
</html>
");
}
?>

Файл config.php

<?
/********************************************/
/*Welcome to Auth Script source-code!*/
/*The Auth Script and its functions, contexture are copyrighted by s1ayer [www.spg.arbse.net]*/
/*Current file: config.php*/
/*Optimized for PHP 4.3.6, Apache 1.3.27*/
/********************************************/
$allow_styles = true; //разрешить таблицу стилей Auth Script ? Значения: true/false
$cookie_lt = 90000000; //время действия cookie после входа в систему (в секундах)
/*IP Ban options*/
$allow_ip_ban = true; //разрешить бан по IP при израсходовании максимального количества попыток входа (указывать ниже) ? Бан также происходит по cookies
$max_try = 5; //максимальное количество попыток входа. Дальше сработает IP Ban
$time_ban = 0; //время действия IP Ban'а (в секундах)
/**/
?>

Файл functions.php

<?
/********************************************/
/*Welcome to Auth Script source-code!*/
/*The Auth Script and its functions, contexture are copyrighted by s1ayer [www.spg.arbse.net]*/
/*Current file: functions.php*/
/*Optimized for PHP 4.3.6, Apache 1.3.27*/
/********************************************/
function user_validate ($UMODE){
if ($UMODE != "A")
{print "Вы не имеете доступа к этой опции<br>";return false;}
else
{return true;}
}
?>

Файл log-db.php

<?die();?>

Файл users-db.php

<?die();?>
admin=>21232f297a57a5a743894a0e4a801fc3=>A

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

Мне необходимо, что бы у меня на сайте интернет магазина была форма авторизации для одно зарегистрированного пользователя - для оптовых покупателей, поскольку им должны быть доступны оптовые и розничные цены, всем остальным пользователям - только розничные.

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

header ("Location: $redirect");

на

header ("Location: [URL=http://адрес.главной страницы");]http://адрес.сайта");[/URL]

Так же указала путь к папке со скриптом.

Однако, форма для ввода логина/пароля должны быть размещены у меня в отдельном файле. Как мне изменить для этого код файла auth.php? Для передачи данных из файла, содержащего формы ввода логина-пароля, в файл auth.php нужно использовать метод get/post? Каким образом?

И еще одна проблема. После входа на сайт, вместо формы ввода логина и пароля должно появится кнопка Выход? Как это реализовать? Причем тоже в отдельном файле *.inc. Этот файл является подключаемым у меня ко всем страницам сайта, что позволит видеть как форму авторизации, так и кнопку Выход на всех страницах сайта.

Заранее спасибо за ответы.



Спустя 10 минут, 20 секунд (10.01.2011 - 18:43) quickxyan написал(а):
впадло читать стокко кода и притом чужого)

Спустя 1 час, 47 минут, 28 секунд (10.01.2011 - 20:31) inpost написал(а):
Ketrin1708
Во первых оформите тегами [ php] & [ /php] для удобства пользователей. А во вторых, почему не обратиться непосредственно к разработчикам скрипта, они то и разбираются в своём приложении? Я думаю, времени достаточно уйдет, чтобы за этот период заработать на создании чистого сайта и своей регистрации.
Я бы может помог, как и другие, но кода ооочень много =(

Спустя 1 час, 12 минут, 32 секунды (10.01.2011 - 21:43) hellmin написал(а):
Обожаю ломать глаза смотря на неоформленный текст...
Цитата
использовать метод get/post? Каким образом?

Это делается методом POST.

Спустя 36 минут, 29 секунд (10.01.2011 - 22:20) Игорь_Vasinsky написал(а):
Цитата
Заранее спасибо за ответы.


не за что. обращайтесь.

Спустя 12 часов, 52 минуты, 6 секунд (11.01.2011 - 11:12) Ketrin1708 написал(а):
Цитата (Игорь_Vasinsky @ 10.01.2011 - 19:20)
Цитата
Заранее спасибо за ответы.


не за что. обращайтесь.


Вам действительно не за что smile.gif

Спустя 2 минуты, 50 секунд (11.01.2011 - 11:15) Ketrin1708 написал(а):
Inpost, спасибо за совет. Однако код взят с интернета, связаться с разработчиками нет возможности. А бОльшая часть кода файла auth.php вообще не будет использоваться.

Все остальные файлы и вовсе не требуют никаких исправлений. Добавила их сюда, что бы было понятно, как работает скрипт.

Спустя 7 минут, 30 секунд (11.01.2011 - 11:22) quickxyan написал(а):
ну если не будет, то удали, то что не нужно и потом код в студию)

Спустя 1 минута, 51 секунда (11.01.2011 - 11:24) quickxyan написал(а):
и вообще как по мне, то код просто авторизации можно сделать раза в 3 меньше)

Спустя 4 минуты, 41 секунда (11.01.2011 - 11:29) Ketrin1708 написал(а):
Часть кода, выделенная красным, в моем случае не нужна. Эта часть кода позволяет создавать, удалять, редактировать новых пользователей системы. Такая функция на сайте мне совсем не нужна.

Спустя 3 минуты, 43 секунды (11.01.2011 - 11:32) Ketrin1708 написал(а):
quickxyan, я же совсем не против сделать его в 3 раза меньше. Если есть возможность - скиньте сюда пример.

В интернете есть множество скриптов авторизации, но практически все они нерабочие.

Спустя 31 минута, 33 секунды (11.01.2011 - 12:04) quickxyan написал(а):
форма для отправки логина и пароля:

<form action = "auth.php" method = "POST">
<input
type = "hidden" name = "posted">
<input
type = "text" name = "login">
<input
type = "password" name = "pass">
<input
type = "submit" value = "Авторизация">



auth.php


<?php

if (isset($_POST['posted']))
{
$login = $_POST['login'];
$pass = $_POST['pass'];

$link=@mysql_connect("localhost","root","") or die("Ошибка подключения к серверу");

mysql_select_db("users",$link) or die ("невозможно подключиться к БД");

$sqlall = "select * from user";
$resultall=mysql_query($sqlall);
$row=mysql_fetch_array($resultall);

while($row){

if (($login==$row['name'])and($pass==$row['pass']))
{
echo "HELLO ".$login;
}
else
{
echo 'Неправильный логин или пароль';
}
$row=mysql_fetch_array($resultall);
}
}

?>


что-то вроде такого, но тут еще много недоработок и можно было бы кое-что поменять, но что-то впадло)

Спустя 10 минут, 34 секунды (11.01.2011 - 12:14) Ketrin1708 написал(а):
Спасибо, но я не использую базу данных.

Спустя 13 минут, 2 секунды (11.01.2011 - 12:27) quickxyan написал(а):
ммм, ну без БД так без БД) просто подключайся вместо БД к файлу и все)))

Спустя 1 час, 2 минуты, 10 секунд (11.01.2011 - 13:30) Ketrin1708 написал(а):
Буду пробовать, спасибо большое за помощь.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.