[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Можно ли подменить имя(id) сессии
Soldier Ghost
Вот такой вопрос у меня возник я в сессии использую id юзера хотел бы узнать можно ли подменять имена сессии в ручную, а то вдруг кто нить просто в сессии наберёт любое число и он зайдёт под другим юзером?
Я понимаю вопрос не много может и туповат но я всё же изучаю пхп smile.gif



Спустя 14 минут, 7 секунд (6.07.2009 - 10:29) glock18 написал(а):
возможно все.

если используются куки, то хакер должен перехватить куки пользователя для этого. И отправить их, сессионную куку в том числе, сам, скажем, cURL'ом.

если используется параметр GET в ссылках, то достаточно просто узнать урл, по которому появлялся пользователь. и из него извлечь id сессии.

Спустя 6 минут, 36 секунд (6.07.2009 - 10:36) Soldier Ghost написал(а):
Блин с куками у меня напряг придётся изучать!!! а может использовать хэшированный айди юзера в имени сессии?

Спустя 1 минута, 29 секунд (6.07.2009 - 10:37) glock18 написал(а):
если украдут - ничего не поможет. только сверение id сессии с какими-то данными клиента. useragent, ip и т.п.

Спустя 12 минут, 27 секунд (6.07.2009 - 10:50) Soldier Ghost написал(а):
Спасибо блин хорошо что спросил smile.gif теперь пока с куками не разберусь не выпущу сайт в свет smile.gif
А вот ещё вопрос канечно не в тему но всё же он меня интересует в общем создал новостник у каждой новости есть свой айди по которой пользователь обращается к ней т.е выглядит так news.php?id=2 например и вот если вписать в строку браузера любое число больше истеного айди news.php?id=215468998 вот так например то открывается новость и коменты только новость пустая в общем я решил избавится от этого греха и сделал запрос к базе вытащил самый последний(большой) айди и сверяю его с айди переданным юзером по ссылке гетом если айди больше того который самый большой в базе то выдаю сообщение типа иди далеко и на долго проблема в том что он ещё ругается на последний айди который существует а с другими всё ок!

Спустя 36 секунд (6.07.2009 - 10:50) twin написал(а):
Цитата
а то вдруг кто нить просто в сессии наберёт любое число и он зайдёт под другим юзером?

Цитата
Блин с куками у меня напряг придётся изучать!!!

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

Спустя 2 минуты, 35 секунд (6.07.2009 - 10:53) Soldier Ghost написал(а):
А нееет он ругается на все новости кроме 1 айди smile.gif

Спустя 22 минуты, 44 секунды (6.07.2009 - 11:16) twin написал(а):
Код. В. Студию.

Спустя 4 минуты, 51 секунда (6.07.2009 - 11:20) Soldier Ghost написал(а):
Только не смейтесь huh.gif
PHP
$id $_GET['id'];
$query "SELECT id FROM news";
$sql mysql_query($query);
while(
$proverka mysql_fetch_array($sql))
if(
$id $proverka['id'])
{
    exit(
"Слишком большой айди");
}

я ещё дописывал ORDER BY id DESC smile.gif результат тот же

Спустя 8 минут, 6 секунд (6.07.2009 - 11:29) sergeiss написал(а):
а такой запрос не пробовал? wink.gif
SQL
SELECT MAX(id) as max_id FROM news

Спустя 7 минут, 12 секунд (6.07.2009 - 11:36) twin написал(а):
Не надо тебе такая проверка. Проверяй результат запроса. Если вернул шиш, то и пиши - нет такого id

Спустя 2 минуты, 22 секунды (6.07.2009 - 11:38) ApuktaChehov написал(а):
Вот мои комментарии:
По поводу зашиты id пользователя, на мой взгляд, самое безопасное использовать куку. Куки тяжело упереть.
У меня куки существуют, пока браузер открыт, потом удаляются. Таким образом еще тяжелее ее спереть. Но если нужно будет, например, запомнить пользователя на какой то срок. То куки должны сохраняться, даже после закрытия браузера.
Дальше.
В твой код, любой "дэбил" загонит инъекцию, дырень страшная (прорва) wink.gif
А по поводу проверки, я бы сделал проще, по крайней мере -1 запрос к базе.
Смысл такой.
Мы с twin одинакого думаем rolleyes.gif
Зачем постоянно проверят самый большой id в базе?
Пусть id будет любое число. Ты ищешь в базе новость с таким id, а если она не найдена, что возвращается? Правильно ничего.
Делаешь проверку: если запрос ничего не вернул, тогда вывести сообщение, типа: Такой новости не существует.
И будет тебе счастье.

Спустя 54 секунды (6.07.2009 - 11:39) Soldier Ghost написал(а):
Ух ты спс запахало smile.gif

Спустя 7 минут, 14 секунд (6.07.2009 - 11:46) Soldier Ghost написал(а):
Действительно я чёто не додумался так сделать всё сделал запахало всем спасибо вот сам код ph34r.gif
PHP
$id = $_GET['id'];
$query = "SELECT * FROM news WHERE id = '$id'";
$sql = mysql_query($query) or die(mysql_error());
if(
mysql_num_rows($sql) == 0)
{
    exit("Такой новости не существует");
}

А где у меня там дыра как я понял в $id = $_GET['id']; он не обработан?

Спустя 10 минут, 28 секунд (6.07.2009 - 11:57) twin написал(а):
Цитата
Куки тяжело упереть.

Куки очень легко упереть. smile.gif

Спустя 3 минуты, 2 секунды (6.07.2009 - 12:00) ApuktaChehov написал(а):
Цитата (Soldier Ghost @ 6.07.2009 - 08:46)
А где у меня там дыра как я понял в $id = $_GET['id']; он не обработан?

Точно! wink.gif

Цитата
Куки очень легко упереть. smile.gif



Хм... Просвети!

Смысл я вложил другой. Сессия, в месте с куками, существует пока открыт браузер.
Как только происходит авторизация пользователя, вдруг, если кука существует, скрипт ее удаляет. Таким образом, нельзя зайти, пусть даже с настоящей кукой, больше одного раза.

Извиняюсь, может я что то запамятовал, давно это было, может уже подзабыл концепцию biggrin.gif

Спустя 18 минут, 8 секунд (6.07.2009 - 12:18) twin написал(а):
Ну например кто нибудь напишет так:
HTML
<img src="javascript:alert(document.cookie)" />

Запусти и ужаснись. Можно это отправить на снифер.
Или самый простой способ. Юзер зарегался в кафе и забыл выйти. Вот тебе и кука. Бери и делай чё хош.

Спустя 6 минут, 11 секунд (6.07.2009 - 12:24) ApuktaChehov написал(а):
Так это же чудесно!

При яваскрипте поможет https.
А при забывчевом пользователе поможет одноразовый вход.
Я на то и указываю, что с одной кукой, можно зайти только ОДИН раз.

Конечно же, 100% гарантии безопасности нет. Просто хочется, сделать все максимально безопасно.

Спустя 2 минуты, 29 секунд (6.07.2009 - 12:27) Soldier Ghost написал(а):
Цитата (twin @ 6.07.2009 - 08:57)
Цитата
Куки тяжело упереть.

Куки очень легко упереть. smile.gif

Так что мне лучше использовать куки или сессии? blink.gif

Спустя 2 минуты, 48 секунд (6.07.2009 - 12:29) twin написал(а):
Цитата
Я на то и указываю, что с одной кукой, можно зайти только ОДИН раз.
Ты указываешь на вот что:
Цитата
По поводу зашиты id пользователя, на мой взгляд, самое безопасное использовать куку.

А это не так. Сессия для того и придумана, что бы не вытаскивать данные на свет божий.
Одноразовый вход это на любителя. И кука кстати не пропадает при закрытии браузера, это делает как раз сессия.
Так что...

Спустя 3 минуты, 31 секунда (6.07.2009 - 12:33) ApuktaChehov написал(а):
Цитата

Так что мне лучше использовать куки или сессии?  blink.gif

Сессии используются при авторизации.

Данные сессии можно хранить в куках. А иногда даже НУЖНО. Их просто больше негде хранить.

Спустя 2 минуты, 6 секунд (6.07.2009 - 12:35) ApuktaChehov написал(а):
twin, ладно.
Как тогда быть? Если не куки, тогда пользоваться добавлением sesid к ссылке браузера?

P.S. Я использую куки, только для хранения данных сессии.

Спустя 2 минуты, 5 секунд (6.07.2009 - 12:37) twin написал(а):
Цитата
Их просто больше негде хранить.

Их нужно и дОлжно хранить в базе. И только там (ну может в файлах). А ключ доступа к этим данным можно хранить в куках. Причем желательно менять его при каждом новом входе. Тогда будет более-менее. По крайней мере нет ответственности за подставленного юзера.

Спустя 41 секунда (6.07.2009 - 12:38) twin написал(а):
Цитата
P.S. Я использую куки, только для хранения данных сессии.

Не вижу смысла... Масло масляное.

Спустя 1 минута, 19 секунд (6.07.2009 - 12:39) ApuktaChehov написал(а):
Так.. стоп. А как их в базе то хранить?

Спустя 26 секунд (6.07.2009 - 12:39) glock18 написал(а):
Сложность "упирания" зависит от кривизны рук разработчика и от количества открытых для общего доступа страниц, на которые эти куки отправляются.

Если все грамотно сделать, то куки не крадутся в принципе. Обычно куки, если они отправляются по http (опечатка была), очень легко получаются при помощи сниффера.

Хранение данных в сессии тоже не обеспечивает их защиту, потому стоит получить мне чужой id сессии, и я уже для сервера тот самый пользователь.

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

PS: ну я опечаток и наделал...

Спустя 7 минут, 57 секунд (6.07.2009 - 12:47) ApuktaChehov написал(а):
glock18 вот такой вопрос:

Допустим ты получил id сессии. И ты пытаешься авторизоваться.

Методы борьбы с этим есть?

Спустя 2 минуты, 21 секунда (6.07.2009 - 12:50) glock18 написал(а):
Цитата (glock18 @ 6.07.2009 - 07:37)
если украдут - ничего не поможет. только сверение id сессии с какими-то данными клиента. useragent, ip и т.п.


это снизит шансы на взлом.

Спустя 1 минута, 2 секунды (6.07.2009 - 12:51) ApuktaChehov написал(а):
А как их можно украсть?
Ну.. самые распространенные варианты

Спустя 1 минута, 8 секунд (6.07.2009 - 12:52) glock18 написал(а):
коспати, ну ты не читаешь что ли?

1. сниффер
2. xss - дырка в сайте.

В этой ветке точно оба варианта уже называли.

Спустя 5 минут, 3 секунды (6.07.2009 - 12:57) ApuktaChehov написал(а):
Прости sad.gif

Ночь не спал. Тормажу сильно.

Я все понял, огромное спасибо!

Спустя 12 минут, 6 секунд (6.07.2009 - 13:09) twin написал(а):
https это слишком жестко.
Вообще что бы защитить на 100% сайт от взлома, нужно не делать его вообще. Но меры принимать необходимо. Все зависит от важности информации, которая на нем имеется.
Получить можно все что угодно, любые данные, используя прокси. Для сервера он клиент, а для клиента - сервер. Только это уж очень накладно и делать такое будут если игра стоит свечь. В остальных случаях вполне достаточно аунтифицировать пользователя и поставить в сессию флаг.
Сессия закроется сама через 24 минуты по умолчанию либо при закрытии браузера. Хранить отдельно в куках идентификатор сессии смысла нет, так как он и так там хранится. А вот любые другие данные о юзере, особенно пароль в любом виде или id не стоит вообще. Потому что нет человека - нет проблемы.
Есть простой способ аунтификации по случайной уникальной строке. Её нужно использовать как ключ и хранить в кукисах. Это при автологине. Потому что такая информация ничего не стоит. При повторном входе этот ключ лучше сменить. Ну и как уже сказал glock18, желательно прявязать его к клиенту. Другого алгоритма я по крайней мере не знаю.
Ну а при одноразовом входе вполне достаточно сессии с привязкой. Все равно на какое то время сервер должен как то различать свой-чужой.


_____________
Schecter damien 6 FR
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.