Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация с помощью сессий, правилен ли алгоритм? 
:(
    Опции темы
Rock
Дата 15.8.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 13.1.2005
Где: Краснодар

Репутация: 0
Всего: 1



Делаю авторизацию на своем сайте, все скрипты инклудятся через index.php
Следовательно, что я делаю:
Алгоритм:
1. При обращении пользователя к index.php происходит проверка: авторизирован пользователь или нет
Код

if ($_SESSION['auth']!='ok') {
 // Гость
} else {
 // Зарегестрированный пользователь
}


 Если нет - заносим(обновляем) запись гостя в БД таблицу user_sessions данные: | member_id | time | user_agent | host |. Если да - заносим(обновляем) запись пользователя.
где:
    member_id - id пользователя (гость имеет id = 0 )
    time - время последней активности
    user_agent - браузер пользователя
    host - ip адрес
и устанавливаем сессию. 
2. Устанавливаю сессию так:
Код

session_start();
$_SESSION['auth']='ok';
$_SESSION['member_id']=$member_id; // Пользователь

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

PM MAIL ICQ   Вверх
Mal Hack
Дата 15.8.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Нет, не правильный. Сессию подделать можно.
Глянь в FAQ есть статья..
PM ICQ   Вверх
Rock
Дата 16.8.2006, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 13.1.2005
Где: Краснодар

Репутация: 0
Всего: 1



че-то не нашел, ничего в FAQ, возможно плохо искал... 
но если сессию можно подделать, то тогда стоит использовать cookie?
PM MAIL ICQ   Вверх
skyboy
Дата 16.8.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Rock, а работа с сессиями реализуется посредством механизма cookie(либо, при "нерабочести" его  - посредством передачи параметра через фдресную строку).
PM MAIL   Вверх
Rock
Дата 16.8.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 13.1.2005
Где: Краснодар

Репутация: 0
Всего: 1



тоесть для выше написанного кода, злоумышленнику достаточно отключить у себя куки и пройти по ссылке с ?auth=ok - и он авторизированн.... ?
PM MAIL ICQ   Вверх
Shark
Дата 16.8.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 18.6.2006
Где: Москва

Репутация: 4
Всего: 4



у меня такой файл... тоже фигня...
Код

<?php
Header("Location: index.php");
include "conf.php";
session_start();


//Здесь мы выбираем БД, подключаемся к БД. 
mysql_select_db('sh');
$connect=mysql_connect($dbhost, $dbuser, $dbpass);
$sql="select * from shusers where name='".mysql_escape_string($_POST['author'])."' and passw='".mysql_escape_string($_POST['password'])."'";
$use=mysql_query($sql);
if($use)
{
$res=mysql_fetch_array($use);
}


//Проверяем совпадает ли введенный Ник с Ником в БД
if($_POST['author'] && $res['name'])
{
echo '<br>Ник -' .$res['name'].'' ;
}
else
{
echo "Пусто";
}

echo "<BR>";

//Проверяем совпадает ли введенный Пароль с Паралем в БД
if($_POST['password'] && $res['passw'])
{
echo 'Пароль -' .$res['passw'].'<br>';
}
else
{
echo "Пусто<br>";
}

//Проверяем совпадает ли Имя с его личным номером
if($_POST['author'] && $res['id_author'])
{
echo 'Id пользователя -' .$res['id_author'].'<br>';
}
else
{
echo "<br>Пусто<br>";
}

//
if($_POST['author'] && $res['users'])
{
echo 'Пользователь -' .$res['user'].'<br>';
}
else
{
echo "<br>Пусто<br>";
}

//
if($_POST['author'] && $res['moder'])
{
echo 'Модератор -' .$res['moder'].'<br>';
}
else
{
echo "<br>Пусто<br>";
}


//
if($_POST['author'] && $res['admin'])
{
echo 'Админ -' .$res['admin'].'<br>';
}
else
{
echo "<br>Пусто<br>";
}


//Проверяем совпадают ли введенные Ник и Пароль в БД
if(isset($res['name']) && isset($res['passw']) && isset($res['id_author']))
{
echo "Логин и Пароль совпали";
}
else
{
echo "Логин или Пароль не верен";
}

//Регистрируем новое Имя
$_SESSION['current_user']=$res['name'];

//Регистрируем Id пользователя
$_SESSION['id']=$res['id_author'];

//
$_SESSION['moder']=$res['moder'];

//
$_SESSION['admin']=$res['admin'];

?>

<?php
$query="select * from shusers where name='".mysql_escape_string($_POST['author'])."';";
$ath=mysql_query($query);
if($ath)
{
$auth=mysql_fetch_array($ath);

$count=$auth['enter']+1;
$query_author="update shusers set enter=".$count." where id_author='".$_SESSION['id']."'";
if(mysql_query($query_author))
{
echo "Добро пожаловать";
}
}
?>



--------------------
Смерть - это только начало... 
Агентство недвижимости Premial
PM MAIL WWW ICQ   Вверх
solenko
Дата 17.8.2006, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Цитата

тоесть для выше написанного кода, злоумышленнику достаточно отключить у себя куки и пройти по ссылке с ?auth=ok - и он авторизированн.... ?

Нет.

А как можно подделать сессию? Я ничего такого не встречел -- ну разве что красть id сессии, но мне то представляется проблемматичным.




--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.