Forum Webscript.Ru

Программирование => PHP => Тема начата: Меняздесьдавнонет от 13 Апреля 2004, 22:59:58

Название: Правда о сессиях. 2Бересь Сергей.
Отправлено: Меняздесьдавнонет от 13 Апреля 2004, 22:59:58
Сначала я стал писать это, как коммент к статье.
Потом, малось усомнившись в последнем выводе, решил написать приватом на пхпклубе.
Однако решил не светить новый ник и сообразил написать здесь.

Вот ссылка для тех, кто не знает, о чем речь:
http://detail.phpclub.net/article/sessions

Статья замечательная.
Но только до середины.
Во всяком случае, у меня есть вопросы к автору.
К использованию дополнительных заголовков, как лишней проверки, у меня претензий нет.
Но вот пресловутые отпечатки... Это какая-то скользкая и неочевидная тема. По ходу, мужик высосал ее из пальца. Отсюда и отпечатки.
Чего только стоит необходимость посылать их руками - насмарку идет встроенный механизм дополнения ссылок!
Опять же = заголвки в этом отпечатке лишние - достаточно и секретного слова с сидом.
По-моему, это голое теоретизирование.

ОЧЕНЬ меня покоробила фраза "Другие заголовки могут быть добавлены ". Возможно, это огрех перевода, но если бы мы могли заставлять браузер посылать произвольные зголовки! Тогда бы и проблемы сессий не было! Не заголовки, а переменные. Это важный момент.

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

Далее, и самое, наверное, главное.
Собственно, сам механизм отпечатков строится на ТОЙ ЖЕ САМОЙ ПРОВЕРКЕ заголовков.
То есть, зачем подделывать отпечаток, который мастер кряхтя и потея впендюривал каждой ссылке и форме, если достаточно придти с теми же самыми заголовками (проверка номер 2), когда можно просто прислать его, и проверка будет положительной! А при других заголовках и вторая не пройдет.

Я правильно понимаю, или чего-то упустил?
Сосбвтенно, в этом и есть вопрос данного поста.
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 13 Апреля 2004, 23:08:44
все, вижу.
он сам об этом пишет, прикрываясь дешевой демагогией.
типа, с отпечатками надо несколько заголовков подделывать.
Ну да, а без отпечатков, типа, несколько заголовков проверять нельзя.
Название: Правда о сессиях.
Отправлено: tserbis от 14 Апреля 2004, 10:53:47
[off]Тред вижу... Освобожусь, прочту, если что-то в переводе - пересмотрю обязательно.[/off]
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 14 Апреля 2004, 12:15:04
нет, не в переводе.
а в авторском тексте.
все, ч то написано про отпечатки пальцев - дешевая демагогия.
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 14 Апреля 2004, 12:16:53
хотя я могу и ошибаться.
потому и запостил это сюда.
Но пока мое мнение, что мужик за кучей слов прячет лажу.
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 14 Апреля 2004, 14:10:56
Больше никто по теме высказаться не в состоянии?

Макс, ну хоть ты посмотри?
Неужели не стыдно иметь туфту на ресурсе?
Название: Правда о сессиях.
Отправлено: ThE0ReTiC от 14 Апреля 2004, 14:57:50
ИМХО это просто прогруз
Ибо серьезные системы все равно будут делаться не на сессиях (точнее их использование возможно вкупе с SSL и пр...)
потом все эти песни про использование допзаголовков - ерунда
кто мне мешает сделать эмулятор на том же перле, который будит бомбить удаленный хост заголовками.
Это, по-моему, приведет скорее к DoS атаке, нежели к взлому сессии...
а вообще не вижу смысла проверять заголовки...
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 14 Апреля 2004, 15:06:06
но я не об этом.
Я о простой логике.
Человек делает А. я не обсуждаю правомерность А.
Я говорю о том, что потом, путем хитрых манипуляций, человек делает В.
Я же утверждаю, что в манипуляциях нет смысла, поскольку В - это и есть А.
что там заголовки используются - что там.

Что если хакер пришлет запрос с нужными заголовками и отпечатками, то ему НЕ НАДО УГАДЫВАТЬ отпечаток.
Ему просто надо поймать отпечаток вместе с сидом. Это равнозначные вещи.
Не поймал отпечаток - значит и сид не поймает.
Поймал сид - значит, и отпечаток у него есть.

Просто там настолько многоходовая операция (то посылаем гетом, это - куками, в одно пишем заголвки, в другое - секретное слово), что очень легко запутаться и потерять логическую нить.
Я считаю, что я нить не потерял, и что отпечаток - совершенно лишняя нефунекциональная вкшь, неоправз\\даннол повышающая затраты на свое поддержание.

Жалко, в оригинале не нашел, куда критиковать.

Сергей, я надеюсь, ты не огранижишься исправлдением слова заголовок на слово переменные.
Название: Правда о сессиях.
Отправлено: tserbis от 14 Апреля 2004, 15:36:10
RomikChef

Пока времени вдумчиво прочесть тред и перечитать статью нет...

>> Жалко, в оригинале не нашел, куда критиковать.
У автора она лежит на сайте здесь - http://shiflett.org/articles/the-truth-about-sessions . Есть ли там куда писать, - не смотрел.

>> Сергей, я надеюсь, ты не огранижишься исправлдением слова заголовок на слово переменные.
Список всех исправлений, которые мы в этом треде посчитаем необходимыми, я обязательно отошлю young\'у (доступа к деталям на правку у меня нет).

[off]Может, сменишь название треда? Вдруг кто-то ещё, кроме ThE0ReTiC\'а, зайдёт...[/off]
Название: Правда о сессиях.
Отправлено: tserbis от 14 Апреля 2004, 17:38:30
Так... Пока могу высказаться по
>> ОЧЕНЬ меня покоробила фраза "Другие заголовки могут быть добавлены ". Возможно, это огрех перевода, но если бы мы могли заставлять браузер посылать произвольные зголовки! Тогда бы и проблемы сессий не было! Не заголовки, а переменные. Это важный момент.

В оригинале "Other headers can be added in this way,...".
Думаю, имелось ввиду, что в сессии для последующей проверки, помимо HTTP_USER_AGENT (Листинг 4) можно запоминать и другие посылаемые браузером заголовки. Честно говоря, я именно так и воспринимал это при чтении.
Считаешь, надо добавить комментарий в этом месте?
Название: Правда о сессиях.
Отправлено: Aku Aku от 14 Апреля 2004, 17:46:07
Цитировать
RomikChef:
ОЧЕНЬ меня покоробила фраза "Другие заголовки могут быть добавлены ".


имеются ввиду существующие заголовки которые можно использовать в составлении ключа

Цитировать
RomikChef:
Что если хакер пришлет запрос с нужными заголовками и отпечатками, то ему НЕ НАДО УГАДЫВАТЬ отпечаток.
Ему просто надо поймать отпечаток вместе с сидом. Это равнозначные вещи.
Не поймал отпечаток - значит и сид не поймает.
Поймал сид - значит, и отпечаток у него есть.


почитай комментарии.
при наличии отпечатка, перехват PHPSESSID не является достаточным для взлома в случае кривых рук хостера:

>> Сессии всех пользователей на большинстве хостингов пишется в
>> папку /tmp. В ОДНУ папку для всех.

По остальным пунктам согласен
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 14 Апреля 2004, 17:52:50
про заголовки - мой косяк.
щас выяснится, что и вотпечатках что-то упустил :-)
Надо на свежую голову почитать.
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 14 Апреля 2004, 17:54:53
Цитировать
Aku Aku:
при наличии отпечатка, перехват PHPSESSID не является достаточным для взлома в случае кривых рук хостера:

Не понял.
А разве, в случае кривых рук хостера, надо вообще что-то перехватывать?
С чего бы просто не прочесть содержимое сессии?
Название: Правда о сессиях.
Отправлено: Aku Aku от 14 Апреля 2004, 17:59:06
в содержимом сессии будет хеш из заголовков, а хакеру нужно узнать из него сами заголовки чтобы их отправить, разве не так?
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 14 Апреля 2004, 18:17:52
нет, не так :-)
хэш заголовков лежит и без отпечатков, для второго пункта
Название: Правда о сессиях.
Отправлено: Aku Aku от 14 Апреля 2004, 18:29:37
чето там мутно написано в статье :-)
еще раз перечитал, имхо все начиная с:

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

бред полнейший.
Название: Правда о сессиях.
Отправлено: Макс от 15 Апреля 2004, 02:06:56
ИМХО
толку от этой защиты столько же, сколько и от "Передачи пароля, зашифрованного яваскриптом (http://phpclub.ru/talk/showthread.php?s=&threadid=37434&rand=3)"
То есть идея может быть и интересная, но нужна лишь тем, у кого нет денег на нормальный хостинг (с SSL + невозможность прочесть чужие файлы сессий)
Насчет реализации - ИМХО в качестве отпечатка лучше хранить IP (его сложнее подделать) или его хеш. А то что у dialup-юзеров может IP смениться при обрыве связи - не страшно (еще раз авторизацию пройдет).
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 15 Апреля 2004, 02:46:11
Эх...
никто меня не понимает...
пойду утоплюсь
Название: Правда о сессиях.
Отправлено: tserbis от 15 Апреля 2004, 14:04:07
Перечитал статью...

RomikChef

>> Собственно, сам механизм отпечатков строится на ТОЙ ЖЕ САМОЙ ПРОВЕРКЕ заголовков.

Вот на это (самое главное) пока не хватило меня... Жду очередного вдохновения, может - ты и прав, "поскольку В - это и есть А".

>> Сначала я стал писать это, как коммент к статье.

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

>> Но вот пресловутые отпечатки...
>> Чего только стоит необходимость посылать их руками - насмарку идет встроенный механизм дополнения ссылок!

Как я понял, отпечатками в статье назван хранящийся в сессии md5 от "комбинации заголовков", "дополнительного секретного префикса" и "session_id()", поэтому мне не ясно про "необходимость посылать их руками".

>> Опять же = заголвки в этом отпечатке лишние - достаточно и секретного слова с сидом.

Да, наверное.

>> Абзац про передавать сид гетом, а отпечаток в куке - это детский, блин, лепет. Это не "допольнительная надежность", а засовывание головы в песок.

Если говорить о настоящем "атакующем", - да, наверное. Если учесть, что бывают и просто случайно увидевшие URL с PHPSESSID в GETе и решившие попробовать, - то его фраза "Более безопасным подходом является использование двух различных методов передачи — GET-данных и кук.", теоретически правильная, по-моему.

ThE0ReTiC

>> серьезные системы все равно будут делаться не на сессиях

Лично я вижу эту статью как направленную исключительно на начинающих, пишущих не самые серьёзные системы.

>> бомбить удаленный хост

Я не понял - к чему это.
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 15 Апреля 2004, 14:09:02
вопрос:
Цитировать
tserbis:
поэтому мне не ясно про "необходимость посылать их руками".

ответ:
Цитировать
tserbis:
использование двух различных методов передачи — GET-данных и кук

:-)
в том то и дело, что отпечатки должны передаваться. Там много написано при их перехват, етц. А, главное, если не передавать, то какой в этом ваще смысл?

Цитировать
tserbis:
фраза "Более безопасным подходом является использование двух различных методов передачи — GET-данных и кук.", теоретически правильная, по-моему.

Если куки поддерживаются, то какой смысл вообще что-то гетом передавать?
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 15 Апреля 2004, 14:17:55
собственно, про передачу:
Цитировать

Для увеличения безопасности необходимо начать включать данные в дополнение к уникальному идентификатору. Рассмотрим механизм управления сессией, при котором уникальный идентификатор передаётся в GET-данных. Если "отпечатки пальцев", сгенерированные в предыдущем примере, также передаются как GET-данные

Это-то меня и огорчает больше всего!
товарищ предлагает отпечаток передавать в куках.
А если у юзера куки не работают? он не сможет работать.
тогда надо передавать отпечаток гетом или отказаться от него вовсе.
А чтобы передавать гетом, надо САМОМУ дополнять все ссылки!!!
Название: Правда о сессиях.
Отправлено: Макс от 15 Апреля 2004, 15:35:10
не понял, а зачем отпечаток куда-то передавать ?
При перовм старте сессии вычисляем отпечаток и пишем его хеш в сессиию.
При следующих session_start, вычисляем отпечаток юзера и сравниваем  с тем, что в сессии. Если не совпадает, просим пройти авторизацию заново.
В чем я не прав ?
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 15 Апреля 2004, 16:20:42
Вопрос не ко мне, а к автору статьи.
Это во-первых.
Во-вторых, если не передавать, то оно и не нужно - мы и так имеем хэш заголовков в сессии, безо всяких отпечатков.
Название: Правда о сессиях.
Отправлено: tserbis от 20 Апреля 2004, 19:55:37
Снова перечитал тред и статью...

желающим поучаствовать в дискуссии:
Из всей статьи достаточно прочитать раздел "Предотвращение ВСД"; весь этот тред - вокруг него.

Макс:

>> идея может быть и интересная, но нужна лишь тем, у кого нет денег на нормальный хостинг

Да, начинающим, на которых, по-моему, и расчитана статья.

>> ИМХО в качестве отпечатка лучше хранить IP (его сложнее подделать) или его хеш. А то что у dialup-юзеров может IP смениться при обрыве связи - не страшно (еще раз авторизацию пройдет).

Автор статьи объясняет своё видение: "разные пользователи могут использовать одни и те же IP-адреса (как в случае использования во многих компьютерных лабораториях HTTP-прокси)".

RomikChef:

>> Но вот пресловутые отпечатки... Это какая-то скользкая и неочевидная тема. По ходу, мужик высосал ее из пальца.
>>Собственно, сам механизм отпечатков строится на ТОЙ ЖЕ САМОЙ ПРОВЕРКЕ заголовков.
>> все, вижу. он сам об этом пишет, ... типа, с отпечатками надо несколько заголовков подделывать. Ну да, а без отпечатков, типа, несколько заголовков проверять нельзя.

Я согласен, что выделять "отпечатки" (в том виде, как это сделано в Листинге 5, с сохранением в $_SESSION[\'fingerprint\'], т.е. в сессии) в "третий пункт" - не правильно. Если в сессии, то пусть даже и не один, а несколько заголовков + префикс и ID сессии, - всё равно это тот же "второй пункт".

>> Если куки поддерживаются, то какой смысл вообще что-то гетом передавать?

Наверное, потому что автор считает, что "для тех, кто разрешил куки, может быть обеспечен дополнительный уровень защиты. ... если атакующий получит уникальный идентификатор через уязвимость браузера, "отпечатки пальцев", вероятно, всё ещё будут ему неизвестны.". Т.е., например, уникальный идентификатор из кук получил через уязвимость, а GET-запроса не видел. Я (пока) так это понимаю.

>> зачем подделывать отпечаток, который мастер кряхтя и потея впендюривал каждой ссылке и форме, если достаточно придти с теми же самыми заголовками (проверка номер 2), когда можно просто прислать его, и проверка будет положительной! А при других заголовках и вторая не пройдет.
>> если хакер пришлет запрос с нужными заголовками и отпечатками, то ему НЕ НАДО УГАДЫВАТЬ отпечаток. Ему просто надо поймать отпечаток вместе с сидом. Это равнозначные вещи. Не поймал отпечаток - значит и сид не поймает. Поймал сид - значит, и отпечаток у него есть.

Кроме случая, когда ID сессии - в куках, отпечаток - GETом.

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

Да, уже согласен.


Итого, пока мой закипевший мозг думает, что накладнореализемый пункт 3 имеет право на жизнь, если ID сессии - в куках, отпечаток - GETом.
До следующего вдохновения... :-)
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 20 Апреля 2004, 20:03:12
В общем, я уже потерял интерес к этой статье.
точно так же, как и к ошибке в переводе документации к [p]date[/p]. Сообщил, а дальше - не мое дело.
Есть у меня один недостаток - не могу долго гореть одной и той же идеей.

Так что, особых претензий к статье у меня нет. Разве что, начинаясь как ОЧЕНЬ толково разъясняющая механизм сессий, заканчивается она весьма невразумительным (который скрипя мохзгами разбирало несколько спецов. а что будет новичок?) и неочевидным финалом. плюс - пафос "правда о сессиях" и "безопасность".
Но по сравнению с другими, где содержатся просто фактические ошибки - вполне сгодится.
Название: Правда о сессиях.
Отправлено: tserbis от 25 Апреля 2004, 12:42:41
RomikChefу:

>> 2Бересь Сергей
2Бресь
(судя по "а впрочем, все это фигня" это всё же не опечатка, а невнимательность)

>> В общем, я уже потерял интерес к этой статье.
OK.
Не против, если в комментарие-вставке дам ссылку на этот тред?

всем:

Сформулировал нижеследующее дополнение, которое хочу вставить перед последним абзацем раздела "Предотвращение ВСД". Несколько дней жду комментов, исправлений, добавлений, и пишу янгу.
Читайте:

----
Ещё раз (это важно!):
(a) если отпечаток ложить в сессию (как сделано в листинге 5), то никакого третьего пункта мы не получаем, и для ВСД нужно выполнить лишь первые два (автор говорит об этом выше), так как предоставив идентификатор сессии, атакующий автоматически предоставит и отпечаток;
(б) (об этом автор не упоминает) вариант передачи отпечатка в куках отпадает вообще, так как пользователи с отключёнными куками не смогут работать;
остаётся передавать отпечаток GETом, и тогда:
(в) для пользователей с отключёнными куками GETом будет передаваться и идентификатор сессии, а значит, раз атакующий смог пройти первый пункт и узнать идентификатор, - то он знает и отпечаток, и третий пункт мы снова не получаем (автор сам говорит и об этом);
(г) (это самое главное и единственный случай, когда мы получаем третий пункт!) для тех, кто разрешил куки, действительно будет "обеспечен дополнительный уровень защиты" (о чём тоже говорит автор), но (автор не упоминает об этом), как и для пункта (в) передача отпечатка GETом требует от разработчика "руками" делать то, что в случае с идентификатором сессии автоматически делается включением session.use_trans_sid, т.е. автодополнять отпечатком ссылки и формы. Кроме того, если и реализовывать пункт (г), то ложить в отпечаток заголовки особого смысла нет (ведь при реализации второго пункта защиты в сессию можно положить и несколько заголовков); вероятно, вполне достаточно будет и секретного префикса с идентификатором.
----
Название: Правда о сессиях.
Отправлено: Меняздесьдавнонет от 25 Апреля 2004, 15:24:03
Да, вполне
Название: Правда о сессиях.
Отправлено: tserbis от 06 Мая 2004, 09:42:17
Всё,
сделано: http://detail.phpclub.net/article/sessions .
Название: Правда о сессиях.
Отправлено: Макс от 06 Мая 2004, 15:08:19
Цитировать
RomikChef:
А чтобы передавать гетом, надо САМОМУ дополнять все ссылки!!!

я на днях мануал обновил и нашел там такую функцию :
[p]output_add_rewrite_var[/p]
Название: Правда о сессиях.
Отправлено: tserbis от 17 Мая 2004, 14:57:41
Да, получается пункт г) всё же достаточно легко реализуем в новых версиях...
Название: Правда о сессиях.
Отправлено: Neter от 21 Мая 2004, 01:49:07
Толи ночь на дворе толи трава была сырая..
Я бегло прочитал своими расширившимися зрачками тред и эту писанину, и вот что хочу сказать:

А нельзя кинуть в сессию хэш объединяющий заголовки браузера и IP\'шник юзера и при проверке "отпечатков" сравнивать с текущим?

Причём здесь размещение хэша отпечатка в строке адреса? Юзер будет помечен как валиндный только если зайдёт с теми же заголовками, с того-же IPшника и с тем-же хэшем сессии. Больше вы ничего сделать не сможете. Ну конечно можно поизвращаться, сделать session.use_only_cookies=1 и/или написать: "если нужна безопастность включите куки".
Если пользователь зашёл на сайт предоставляющий повышенный уровень безопастности оттуда, где могут подсмотреть ИДшник сессии надо его проинформировать, пусть знает на какой риск он идёт отключая куки.
Ну если уж очень хочется скрыть ИД сессии от беглово взгляда можно заюзать старые, добрые фрэймы. :)

Не бейте слишком сильно, если чего не понял..