Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как правильно защитить файлы администрирования от несанкционированного доступа?
 
 автор: Mookapek   (28.08.2008 в 22:55)   письмо автору
 
 

Я себе так представляю:
Вводиться логин, пароль в форму, введенные данные сверяются с теми, что хранятся в БД, если всё верно логин и пароль записываются в сессию, и в коде каждого файла администрирования проверяется, имеются ли сессии с правильной связкой логин+пароль.
Правильно ли таким способом ограничивать доступ?

  Ответить  
 
 автор: Valick   (28.08.2008 в 23:44)   письмо автору
 
   для: Mookapek   (28.08.2008 в 22:55)
 

Достаточно одного логина или какойто другой переменной зарегистрированной в сесии. А пароль как лежал в БД в обличии хеша, так пусть там и лежит)

  Ответить  
 
 автор: Trianon   (29.08.2008 в 00:18)   письмо автору
 
   для: Mookapek   (28.08.2008 в 22:55)
 

зачем писать пароль в сессию?

  Ответить  
 
 автор: BinLaden   (29.08.2008 в 01:30)   письмо автору
 
   для: Trianon   (29.08.2008 в 00:18)
 

А как Вы считаете - можно ли разрешать пользователям создавать несколько сессий подряд, под которыми он прошёл аутентификацию? То есть одновременно будет существовать 2-3 сессии, в файлах которых будет записан идентификатор пользователя "Вася".

  Ответить  
 
 автор: mihdan   (30.08.2008 в 03:02)   письмо автору
 
   для: BinLaden   (29.08.2008 в 01:30)
 

Думаю не стоит. Сессия должна быть одна (правда ошибки предусмотреть стоит). А так вы правы

  Ответить  
 
 автор: Trianon   (30.08.2008 в 12:50)   письмо автору
 
   для: BinLaden   (29.08.2008 в 01:30)
 

>>зачем писать пароль в сессию?
>А как Вы считаете - можно ли разрешать пользователям создавать несколько сессий подряд, под которыми он прошёл аутентификацию? То есть одновременно будет существовать 2-3 сессии, в файлах которых будет записан идентификатор пользователя "Вася".

Не вижу связи между вопросами.
Я вообще не считаю сессионный идентификатор удачным токеном аутентификации. Но дело же не во мне?

А можно или нет - решает автор.. Мне бы не понравилось.

  Ответить  
 
 автор: Mookapek   (30.08.2008 в 16:30)   письмо автору
 
   для: Trianon   (30.08.2008 в 12:50)
 

Я в этом вопросе не профи, а потому создал тему, где спросил насколько удачна идея с сессиями.
>>Я вообще не считаю сессионный идентификатор удачным токеном аутентификации.
А как можно еще поступить, не используя сессий?
К примеру, чтобы ограничить доступ к аккаунту пользователя?

  Ответить  
 
 автор: Trianon   (30.08.2008 в 16:57)   письмо автору
 
   для: Mookapek   (30.08.2008 в 16:30)
 

>Я в этом вопросе не профи, а потому создал тему, где спросил насколько удачна идея с сессиями.
>А как можно еще поступить, не используя сессий?
Использовать Cookie.

[поправлено модератором]

  Ответить  
 
 автор: BinLaden   (31.08.2008 в 12:43)   письмо автору
 
   для: Trianon   (30.08.2008 в 12:50)
 

> Не вижу связи между вопросами.

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

В общем-то я не защитник идеи записывать пароль в сессию, но это может быть ответом на "зачем писать пароль в сессию?". Или не пароль, а какой-то хеш.

  Ответить  
 
 автор: Trianon   (31.08.2008 в 13:10)   письмо автору
 
   для: BinLaden   (31.08.2008 в 12:43)
 

>> Не вижу связи между вопросами.
BinLaden, поймите, я не придираюсь, и не пытаюсь спорить ради спора.
Я пытаюсь понять ход мыслей.

>Понятно ведь, что если бы была возможность создавать несколько сессий,
то злоумышленник, сумевший украсть этот token,
session_id?

>смог бы пользоваться аккаунтом и при смене пароля, что не очень приятно.
любые неаутентичные действия в той или иной степени неприятны.

>Поэтому пароль может компенсировать как-то этот промах с сессиями,
Каким образом?!

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

Кто б спорил. Токены аутентификации так или иначе, конечно, надо записывать.
Даже если ими являются идентификаторы сессии.
Но даже если их не записывать - от чем поможет пароль в сессии?

>В общем-то я не защитник идеи записывать пароль в сессию, но это может быть ответом на "зачем писать пароль в сессию?".

Или не пароль, а какой-то хеш.
Ну вот, начинается.
Хеш - это уже не пароль.
Какой-то хеш - уже совсем не пароль.

Но даже если и так, то до меня все равно не доходит - чем спасет [некий] хеш пароля , записанный в сессионный массив?

Давайте уж дороем до истины...

  Ответить  
 
 автор: BinLaden   (31.08.2008 в 14:53)   письмо автору
 
   для: Trianon   (31.08.2008 в 13:10)
 

>>Понятно ведь, что если бы была возможность создавать несколько сессий,
>то злоумышленник, сумевший украсть этот token,
>session_id?

Да.

>>смог бы пользоваться аккаунтом и при смене пароля, что не очень приятно.
>любые неаутентичные действия в той или иной степени неприятны.
>
>>Поэтому пароль может компенсировать как-то этот промах с сессиями,
>Каким образом?!
>

<?php

$query 
"SELECT * FROM `accounts` WHERE `id` = {$_SESSION['id']} AND `password` = '" mysql_escape_string($_SESSION['password']) . "';";
$result mysql_query($query);

if(  
mysql_num_rows($result) < )
{
    
# logout
}
?>


> Ну вот, начинается.

Понимаю негодование:) Не буду придумывать.

  Ответить  
 
 автор: Trianon   (31.08.2008 в 15:04)   письмо автору
 
   для: BinLaden   (31.08.2008 в 14:53)
 

Если я правильно понял, предлагается ввести защитный ключ, которым проверять сессию на достоверность.

Но тогда возникают два вопроса.
1. Если бы этот ключ жил в СOOKIES - я бы понял.
Но и сессия и таблица на стороне сервера. Что даст такое сравнение "по одну сторону прилавка"?

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

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

  Ответить  
 
 автор: BinLaden   (31.08.2008 в 15:10)   письмо автору
 
   для: Trianon   (31.08.2008 в 15:04)
 

Если честно, то не понимаю как можно проверять сессию на достоверность, а точнее зачем. Её же не могут подделать.

Так что на вопросы 1, 2 ответить не могу.

Я имею ввиду, что это была бы какая-то возможность уничтожить сессию в случае смены данных, с помощью которых она была создана. Обычно же проверяется логин/пароль или, что эквивалентно, идентификатор и пароль. В случае смены пароля украденная сессия получается продолжает спокойно жить.

  Ответить  
 
 автор: Valick   (31.08.2008 в 15:18)   письмо автору
 
   для: BinLaden   (31.08.2008 в 15:10)
 

В случае смены пароля украденная сессия получается продолжает спокойно жить.
о какой смене пароля идёт речь?
Обычно же проверяется логин/пароль
Да но они приходят от пользователя. А проверять на соответствие логин/пароль взятый из сессии бессмысленно, т.к. он всегда будет совпадать.

  Ответить  
 
 автор: Trianon   (31.08.2008 в 15:23)   письмо автору
 
   для: BinLaden   (31.08.2008 в 15:10)
 

>Я имею ввиду, что это была бы какая-то возможность уничтожить сессию в случае смены данных, с помощью которых она была создана. Обычно же проверяется логин/пароль или, что эквивалентно, идентификатор и пароль. В случае смены пароля украденная сессия получается продолжает спокойно жить.

Опять же, скрипт, меняющий пароль, может просто стереть ид сессии из таблицы.

  Ответить  
 
 автор: BinLaden   (31.08.2008 в 15:28)   письмо автору
 
   для: Trianon   (31.08.2008 в 15:23)
 

> Опять же, скрипт, меняющий пароль, может просто стереть ид сессии из таблицы.

Вот именно! Я же и говорил выше, что для этого их нужно записывать в эту самую таблицу. А запись пароля (ну или чего-то подобного) я рассматриваю как альтернативу, которой, правда, сам я никогда не пользовался.

  Ответить  
 
 автор: Trianon   (31.08.2008 в 15:37)   письмо автору
 
   для: BinLaden   (31.08.2008 в 15:28)
 

чего-то подобное - готов признать, как альтернативу. Например, писать в сессию время последней установки пароля.

  Ответить  
 
 автор: Valick   (31.08.2008 в 16:15)   письмо автору
 
   для: BinLaden   (31.08.2008 в 15:28)
 

Ну вот.... осталось вам убедить только меня.
Если спёрли сессию... то её сперли со всеми потрохами... т.е. со всем тем что вней на данный момент находится. и будь там 10000 паролей что из того?
Опять же, скрипт, меняющий пароль, может просто стереть ид сессии из таблицы
Мы говорим об угоне сессии или уже о взломе сервера? Что ещё за скрипт меняющий пароль?

  Ответить  
 
 автор: DDK   (29.08.2008 в 01:42)   письмо автору
 
   для: Mookapek   (28.08.2008 в 22:55)
 

http://softtime.ru/article/index.php?id_article=27

  Ответить  
 
 автор: Mookapek   (29.08.2008 в 01:58)   письмо автору
 
   для: DDK   (29.08.2008 в 01:42)
 

Штацесс катит вроде только для ограничение доступа к файлами администрирования.
А если речь идет об ограничении доступа к аккаунту пользователя. То есть, чтобы пользователь передвигался по своему аккаунту и не вводил постоянно логин+пароль.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования