Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Как сделать авторизацию на сайте?

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 10 Август 2009 - 18:59

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

Каков алгоритм авторизации?


 

 

  • 0

#2 Евгений

Евгений
  • Пользователь
  • 481 сообщений
  • Репутация: 0

Отправлено 10 Август 2009 - 19:16

я вот по этой статье учился http://habrahabr.ru/blogs/php/13726/
  • 0

#3 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 10 Август 2009 - 19:27

ты ее потом переработал?
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 10 Август 2009 - 19:47

sc2r2bey, баян, на форуме уже обсуждалась. Если возникнут проблемы или вопросы, то спрашивай.
  • 0

#5 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 10 Август 2009 - 20:03

тогда критикните вот такой код

index.php

<?php
//включаем сессию
session_start();
define( 'NET', 1 );
//подключаем БД
include '../include/configuration.php';
$_SESSION['id'] = session_id();
$url=$_SERVER['PHP_SELF'];
$filename = basename($url);
$_SESSION['link'] = "$filename";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional-dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<link rel="stylesheet" type="text/css" href="../css/css.css" />

<title></title>
</head>
<body>

<div id="panel">
<!--форма авторизации-->
<form action="authorization.php" method="post">
<table border="0">

<tr>
<td>Имя пользователя(логин): </td>
<td><input type="text" name="login" value="<?php if($_SESSION['login'] == 0) echo $_SESSION['login']; ?>" size="25" /></td>
</tr>
<tr>
<td>Пароль: </td>
<td><input type="password" name="password" value="" size="25" /></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="войти" name="submit" /></td>
</tr>

</table>
</form>
</div>
</body>
</html>


autorization.php

<?php
//включаем сессию
session_start();
define( 'NET', 1 );
$filename = $_SESSION['link'];
//подключаем БД
include '../include/configuration.php';

//Проверка переходa со страницы авторизации
if(isset($_POST['submit']))
{

//Сравниваем переданный идентификатор из формы с текущим идентификатором сессии
if($_SESSION['id'] != session_id())
{
exit("$error");
}

//Авторизация
$login = mysql_escape_string($_POST['login']);
$email_query = "SELECT password FROM user WHERE login='".$login."' AND id_user=1";
$name = mysql_query($email_query);
if(!$name)
{
echo mysql_error();
echo "Ошибка выполнения запроса!<br />";
echo "<meta http-equiv='refresh' content='1; url=".$filename."'>";
echo "<a href='".$filename."'>Попробуйте еще!</a>";
exit();
}

if(mysql_num_rows($name) > 0)
{
$password = mysql_result($name, 0);
if (md5(md5(mysql_escape_string($_POST['password']))) == $password)
{
if(session_start())
{
$_SESSION['ok'] = 1;
$filename = $_SESSION['url'];
echo "<meta http-equiv='refresh' content='0; url=login.php'>";
echo "<a href='".$filename."'>Нажмите ссылку, если Ваш браузер не поддерживает автоматическую переадресацию!</a>";
}
}
else
{
echo "Неправильный пароль!<br />";
echo "<meta http-equiv='refresh' content='1; url=".$filename."'>";
echo "<a href='".$filename."'>Попробуйте еще!</a>";
exit();
}
}

else
{
echo "Такой пользователь не зарегистрирован!<br />";
echo "<meta http-equiv='refresh' content='1; url=".$filename."'>";
echo "<a href='".$filename."'>Попробуйте еще!</a>";
exit();
}
}
else
{
exit ("$error");
}
?>

  • 0

#6 Евгений

Евгений
  • Пользователь
  • 481 сообщений
  • Репутация: 0

Отправлено 10 Август 2009 - 20:08

ты ее потом переработал?

она рабочая прям в том виде как там написано =)
ток я совсем чуть чуть доработал код и вставил дополнительную защиту от брутфорса

тогда критикните вот такой код

ща критикну
1. А если пользователь закроет браузер ему снова придется вводить логин и пароль!?
2.
md5(md5(mysql_escape_string($_POST['password'])

2.1 не обязательно для шифрованного пароля делать mysql_escape_string
2.2 говорят что md5(md5(pass)) сломать так же легко как md(pass). Лучше использовать что то вроде md5(pass).sha1(pass).sha1(salt) (ну или любой другой код, можно md5(sha1(pass).md5(salt)) и пр.)
salt - это любой набор символов, чем сложней тем лучше, для того чтоб обезопасить пользователей у которых простой пароль.
  • 0

#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 10 Август 2009 - 20:34

sc2r2bey,
define( 'NET', 1 );

Вообще ни о чём. Хотя возможно проверка в конфигурационном файле идёт. Защита от просмотра. Не вижу кода, сказать не могу...

$url=$_SERVER['PHP_SELF'];

Нигде не используется в файле index.php

	//Сравниваем переданный идентификатор из формы с текущим идентификатором сессии
if($_SESSION['id'] != session_id())
{
exit("$error");
}

Бесполезная защита. ID сессии хранится в куках или GET строке. Оттуда и происходит восстановление соединения при каждом переходе меж страниц. Если кто-то заберёт id из кук, то подобная проверка бесполезна.

			//Авторизация
$login = mysql_escape_string($_POST['login']);
$email_query = "SELECT password FROM user WHERE login='".$login."' AND id_user=1";
$name = mysql_query($email_query);
if(!$name)
{
echo mysql_error();
echo "Ошибка выполнения запроса!<br />";
echo "<meta http-equiv='refresh' content='1; url=".$filename."'>";
echo "<a href='".$filename."'>Попробуйте еще!</a>";
exit();
}

if(mysql_num_rows($name) > 0)
{
$password = mysql_result($name, 0);
if (md5(md5(mysql_escape_string($_POST['password']))) == $password)
{
if(session_start())
{
$_SESSION['ok'] = 1;
$filename = $_SESSION['url'];
echo "<meta http-equiv='refresh' content='0; url=login.php'>";
echo "<a href='".$filename."'>Нажмите ссылку, если Ваш браузер не поддерживает автоматическую переадресацию!</a>";
}
}
else
{
echo "Неправильный пароль!<br />";
echo "<meta http-equiv='refresh' content='1; url=".$filename."'>";
echo "<a href='".$filename."'>Попробуйте еще!</a>";
exit();
}
}

else
{
echo "Такой пользователь не зарегистрирован!<br />";
echo "<meta http-equiv='refresh' content='1; url=".$filename."'>";
echo "<a href='".$filename."'>Попробуйте еще!</a>";
exit();
}

Этот кусок кода можно было сократить в пару раз так:
			//Авторизация
$login = mysql_escape_string($_POST['login']);
$pass = md5(md5($_POST['password']));
$query = "SELECT login, password FROM user WHERE login='{$login}' AND password='{$pass}' AND id_user=1";
$res = mysql_query($query);
if(!$res) {
echo mysql_error();
echo "Ошибка выполнения запроса!<br />";
echo "<meta http-equiv='refresh' content='1; url={$filename}'>";
echo "<a href='{$filename}'>Попробуйте еще!</a>";
exit();
}

if(mysql_num_rows($res) == 1)
{
$array = mysql_fetch_array($res);
$_SESSION['ok'] = 1;
unset($_SESSION['link']);
$filename = $_SESSION['url'];
echo "<meta http-equiv='refresh' content='0; url=login.php'>";
echo "<a href='{$filename}'>Нажмите ссылку, если Ваш браузер не поддерживает автоматическую переадресацию!</a>";
} else {
echo "Такой пользователь не зарегистрирован!<br />";
echo "<meta http-equiv='refresh' content='1; url=".$filename."'>";
echo "<a href='".$filename."'>Попробуйте еще!</a>";
exit();
}

  • 0

#8 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 10 Август 2009 - 20:41

ценные замечание попробую доработать!
  • 0

#9 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 12 Август 2009 - 23:00

Сообщения не содержащие смысловой нагрузки по данному вопросы, перенесены в отдельную тему [Как лучше шифровать пароли?]
  • 0

#10 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 29 Январь 2010 - 02:10

ZiTosS, а насколько сей код безопасен
и что еще можно сюда добавить?


  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru