Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2010, 10:45   #1
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию Подмена сессии

На сайте есть форма авторизации. При правильном введении логина & пароля в сессии сохраняется логин пользователя. Может ли злоумышленник каким то образом заменить это имя на другое? Если да, то как от этого защититься?
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 27.03.2010, 12:08   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,569
По умолчанию

Вопрос совершенно не корректен. Всё зависит от того, как именно происходит идентификация сессии. В одной системе это возможно, в другой нет, от реализации зависит.
К примеру, был глюк в форумах phpbb2 старых версий, что можно было подменой куки идентифицироваться от имени любого пользователя (в том числе и админа).
Arigato вне форума Ответить с цитированием
Старый 27.03.2010, 14:25   #3
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

Цитата:
К примеру, был глюк в форумах phpbb2 старых версий, что можно было подменой куки идентифицироваться от имени любого пользователя (в том числе и админа).
Да, я читал об этом. Я имею ввиду примерно такой механизм:

1) Пользователь авторизируется, вводя свой логин и пароль.
2) Если логин и пароль правельны, то логин сохраняется в сессии: $_SESSION["username"] = $userName
3) Далее. На сайте можно комментировать новости. При сохранении комментария в БД сохраняется сам текст, время и логин автора. Логин автора берётся именно из массива $_SESSION. ($_SESSION["username"])

Может ли злоумышленник каким либо образом подменить значение $_SESSION["username"] ?
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 27.03.2010, 18:26   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,569
По умолчанию

Какой-то детсадовский механизм вы описали. Так ни кто не делает. Разве что студент или школьник какой. Уровень безопасности = 0 в данном примере.
Arigato вне форума Ответить с цитированием
Старый 28.03.2010, 13:24   #5
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Какой-то детсадовский механизм вы описали. Так ни кто не делает. Разве что студент или школьник какой. Уровень безопасности = 0 в данном примере.
В чем именно он детсадовский? Приведите, пожалуйста, Ваш механизм.
SkyM@n вне форума Ответить с цитированием
Старый 28.03.2010, 16:01   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,569
По умолчанию

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

Цитата:
Сообщение от SkyM@n
Приведите, пожалуйста, Ваш механизм.
В зависимости от задачи нюансы могут отличаться, но в общем случае примерно так:
1. Используем форму входа: Логин, Пароль. Пароль отправляется на сервер не в открытом виде, а в виде специального хеша (модификация на базы md5), который расчитывается на JS (если JS отключён, отправляется открытый пароль).
2. Если логин и пароль верны, в БД записывается рандомный код сессии, User_Agent и часть IP-адреса (обычно, первые 3 байта). В куки браузера записывается код сессии (вообще говоря, я обычно использую 2 разных кода сессии, 1 для идентификации, а 2-й для форм).
3. Идентификация пользователя происходит по совпадению кода сессии и User_Agent'а с частью IP-адреса.
Ни логин, ни пароли или ещё чего-либо подобное для идентификации уже не используется. Исключение: автовход, но это немного другая тема.

Последний раз редактировалось Arigato; 28.03.2010 в 16:08.
Arigato вне форума Ответить с цитированием
Старый 29.03.2010, 15:58   #7
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

А если юзер зайдет с другого браузера или у него статичный айпи (или же он зашел с другого компьютера/через другой провайдер) то что тогда?
А если злоумышленник займется спуффингом и также подделает строку userAgent? Украдет куки? Заходи, бери, что хочешь?
SkyM@n вне форума Ответить с цитированием
Старый 29.03.2010, 17:42   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,569
По умолчанию

На счёт захода с другого браузера не совсем понял, т.к. с другого браузера в любом случае придётся авторизироваться, будет новый код сессии.
А на счёт злоумышленника. Так идеальных способов защиты не существует (тем более, если мы говорим о случае простого сайта, без каких-либо специальных требований по безопасности). Что бы злоумышленнику воспользоваться чужой сессией, ему надо:
1. Украсть куки. Если писать скрипты аккуратно, то украсть куки через сайт не удастся, тогда вариант типа трояна. Но тут проще сразу пароль захватить при вводе.
2. Узнать, под каким браузером сидит юзер.
3. Подделать свой IP адрес так, что бы он совпадал (пусть даже первые 3 байта) с адресом жертвы. Для этого, как минимум, надо ещё и IP жертвы узнать.
Довольно много препятствий, которые рядовому хакеру преодолеть будет не так-то и просто. И куда надёжнее, чем просто хранить имя пользователя в сессии без какой-либо иной информации.
Arigato вне форума Ответить с цитированием
Старый 29.03.2010, 19:41   #9
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Убедили.
SkyM@n вне форума Ответить с цитированием
Старый 30.03.2010, 02:10   #10
Roms
Пользователь
 
Регистрация: 30.06.2008
Сообщений: 10
По умолчанию

А вообще сессию ($_SESSION) можно подделать? Это ведь не кукисы ($_COOKIE), которые действитеьно можно украсть. Ведь сессия храниться на сервере, а не в компьютере пользователя
Roms вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подмена порта Bertrance Свободное общение 9 06.02.2010 08:30
подмена клавиши А на B GeneralSan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 23.12.2009 20:28
Подмена IP ? KAKTYC PHP 2 28.10.2008 00:14
Подмена функции Hyena Общие вопросы C/C++ 2 17.10.2008 08:58
Подмена клавиш martinz Win Api 19 25.11.2007 09:02