Перейти к контенту

fagediba

Пользователи
  • Число публикаций

    58
  • Регистрация

  • Последнее посещение

  • Дней в топе

    3

fagediba последний раз побеждал 4 Марта 2011

fagediba - автор самых популярных публикаций!

Недавние посетители профиля

3 892 просмотра профиля

Достижения fagediba

  1. поставь phpMyAdmin и проверь базу там, если будут ошибки - запуски "восстановить" поставив все галки (у всех таблиц)
  2. $this->ipsclass->DB->simple_construct( array( 'select' => 'id', 'from' => 'sessions', 'where' => "member_id ='".$this->ipsclass->member['id']."' and id !='$session_id'") ); $this->ipsclass->DB->simple_exec(); $i_123 = 0; while($id_of_session_exists = $this->ipsclass->DB->fetch_row()) { $massiv_sessii[$i_123] = $id_of_session_exists['id']; $i_123 = $i_123 + 1; } foreach( $massiv_sessii as $sessia_k_porche ) { $random_session = md5( uniqid(microtime()) ); $this->ipsclass->DB->do_update( 'sessions', array ( 'id' => $random_session, ), "id ='".$sessia_k_porche."' and member_id ='".$this->ipsclass->member['id']."'" ); } вроде пашет update какая-то ошибка бд стала вылезать, пока отрубил изменения update2 похоже не из-за этого ошибка была, но надо еще потеститровать.
  3. $this->ipsclass->DB->simple_construct( array( 'select' => 'id', 'from' => 'sessions', 'where' => 'member_id ='' . $this->ipsclass->member['id'] . '' and id !='' . $session_id . ''') ); $this->ipsclass->DB->simple_exec(); $i_123 = 0; while($id_of_session_exists = $this->ipsclass->DB->fetch_row()) { $massiv_sessii['$i_123'] = $id_of_session_exists['id']; $i_123 = $i_123 + 1; } foreach( $massiv_sessii as $sessia_k_porche ) { $random_session = md5( uniqid(microtime()) ); $this->ipsclass->DB->do_update( 'sessions', array ( 'id' => $random_session, ), "id ='".$sessia_k_porche."'" ); } ?
  4. Добавил код, работает. Правда только сначала. При авторизации в другом браузере слетает авторизация, соответственно пользователь сразу подозревает, что с его акка сидят. Но если еще раз заавторизоваться вылезает ошибка БД. Я думаю это из-за того, что если "других" сессий, которые нужно испортить, больше 1, то нельзя им всем присвоить одно и тоже значение, т.к. сессия должна быть уникальна. Т.е. нужно организовать в цикле обход всех "других" и каждой из них присвоить новое уникальное значение. Что-то типа: $this->ipsclass->DB->simple_construct( array( 'select' => 'id', 'from' => 'sessions', 'where' => 'member_id ='' . $this->ipsclass->member['id'] . '' and id !='' . $session_id . ''') ); $this->ipsclass->DB->simple_exec(); while($id_of_session_exists = $this->ipsclass->DB->fetch_row()) { $random_session = md5( uniqid(microtime()) ); $this->ipsclass->DB->do_update( 'sessions', array ( 'id' => $random_session, ), "id ='".$id_of_session_exists['id']."'" ); } можете проверить этот код особенно интересует можно ли делать запросы к базе в то время, когда идет цикл fetch_row, и если это нельзя - то можно наверно сначала записать все значения "других" сессий в массив, а потом в цикле их испортить
  5. В общем получается проверку ИП можно хоть включать, хоть отключать - без разницы. Лучше отключить, т.к. это защита только от кражи сессии, а не от кражи самого пароля от акка, а именно это наиболее вероятно т.к. впаривают вирусню обычно которая крадет как раз пароль. Там получается так: если логиниться с разных ип адресов в один аккаунт - создается 2 сессии. И каждый проходит функцию auto-login по своей сессии. И хотя member_login_key и сменен - злоумышленник авторизуется по своей сессии и без этого ключа. И после этого еще и получает новую куку pass_hash с новым значением member_login_key и в результате контролирует украденный аккаунт веки вечные. Выход вижу такой: нужно при авторизации не только менять member_login_key (что уже сделано, проверил - меняется), но и портить все другие сессии для этого аккаунта. Можно их просто удалить - но мне надо видеть, если сидят одновременно с акка 2 человека. Поэтому мне нужно именно испортить все остальные сессии. Т.е. нужно прописать в конец авторизации запрос к базе, который выбирал бы все сессии где member_id = нашему аккаунту session_id != нашей сессии (т.е. все другие сессии, если они есть) И запортить ключ сессии - т.е. записать туда любое значение Вот допустим код, его нужно переделать: $this->ipsclass->DB->do_update( 'sessions', array ( 'member_name' => $member['members_display_name'], 'member_id' => $member['id'], 'running_time' => time(), 'member_group' => $member['mgroup'], 'login_type' => $privacy ), "id='".$session_id."'" ); переделанный: //генерируем случайную сессию $random_session = md5( uniqid(microtime()) ); //Портим все другие рабочие сессии $this->ipsclass->DB->do_update( 'sessions', array ( 'id' => $random_session, ), "member_id ='".$this->ipsclass->member['id']."' and id !='".$session_id."'" ); Проверьте пожалуйста мой вывод и запрос
  6. Сверять по браузеру у меня и так стоит, ничего не сбрасывается. Тогда получается нужно изменить процесс авторизации. После успешной проверки логина-пароля должен создаваться новый мембер-логин-ки, и после этого только пользователь должен получать куки закомментил if ( $this->ipsclass->vars['login_change_key'] OR ! $member['member_login_key'] OR ( $this->ipsclass->vars['login_key_expire'] AND ( time() > $member['member_login_key_expire'] ) ) ) { $member['member_login_key'] = $this->ipsclass->converge->generate_auto_log_in_key(); $this->ipsclass->DB->do_update( 'members', array( 'member_login_key' => $member['member_login_key'], 'member_login_key_expire' => $_time ), 'id='.$member['id'] ); } и написал $member['member_login_key'] = $this->ipsclass->converge->generate_auto_log_in_key(); $this->ipsclass->DB->do_update( 'members', array( 'member_login_key' => $member['member_login_key'], 'member_login_key_expire' => $_time ), 'id='.$member['id'] ); т.е. всегда при авторизации должно это выполняться - и все равно сижу с двух браузеров в 1 акке
  7. Здравствуйте. Проблема такая: нужно, чтобы в случае, если кто-то сидит под чужим аккаунтом истинный владелец об этом как-то узнавал. 2,3,6 В настройках включено Сбрасывать ключ авторизации пользователей при каждом входе Если опция включена, то каждый раз при успешной авторизации пользователя ключ авторизации пользователя в cookies, используемый как пароль, будет сброшен. Таким образом невозможно одновременно авторизоваться на форуме с более, чем одного компьютера. Но я могу сидеть в своем акке и с Мозиллы, и с Экслорера, также захожу с другой учетки винды - и там тоже могу еще раз с Мозиллы авторизоваться. Т.е. с трех мест могу сидеть на своем акке. А нужно, чтобы слетало все остальное. Можно ли как-то сделать, чтобы при авторизации для аккаунта сбрасывались все остальные авторизации? П.С. И еще добавочка: когда я сидел с трех браузеров, в таблице sessions на мой акк было три записи. Я стер их все - и все равно при обновлении браузера авторизация не слетела, а эти записи появились в базе снова. Т.е. надо как-то сделать, чтобы ключ в куках пользователя перестал работать. Если штатными средствами этого не достичь (запрета сидения в акке с разных браузеров) - то предлагайте за сколько примерно денег вы можете это реализовать. Т.е. надо, чтобы если происходит авторизация в акк - все остальные авторизации слетали нафиг.
  8. Во сколько можно оценить написание мода, что бы Кстати ровно это реализовано в ИПБ в профиле - там показываются последние 10 человек, просматривающих данный профиль. Лично на моем форуме количество пользователей где-то в 2,5 раза больше количество топиков, значит особо грузить этот мод систему не должен, раз он и так реализован уже, только пишется лог посещения не топиков, а профилей
  9. Это фигня работает на ипб двойке, тройке, на vBulletin тройке и последней четверке... Как-то это удручающе. У меня такое ощущение, что это баг не форума, а браузера. Что браузер должен такое блокировать. Ведь браузер по сути выполняет код с другого сайта, вместо вывода картинки идет запрос логина-пароля, браузер должен такое определять и блокировать. Здесь можно сделать так: добавить дополнительный параметр допустим <img src="адрес" ask_password=0> Соответственно переписать парсер бб кода чтобы вставлял этот параметр. А браузеры, когда отрабатывают хтмл - учитывают это, и не выводят окно с запросом логина пароля.
  10. ПРОСТО ЗАКРОЙТЕ ПОЯВИВШЕЕСЯ ОКНО!!! [img1]http://hack4you.h17.ru/xxxS/smile.gif[/img] [img=http://hack4you.h17.ru/xxxS/smile.gif] Вот такая штука. Как нибудь можно от нее защитится? Вот скрин на всякий случай окна:
  11. В общем стоит мод спасибо. Нажатие кнопки реализовано яваскриптом, а если ява отключен то по ссылке. Нужно вставить дополнительное ограничение, 15 дней регистрации для нажатии и репутацию >= 0 С пхп частью справился, вставил доп код: $member_spasibo = $this->ipsclass->DB->build_and_exec_query( array ('select' => 'joined,reputation', 'from' => 'members', 'where' => 'id='.$this->ipsclass->member['id'], 'limit' => array( 0,1 ) )); // Check permissions if ( ((intval($member_spasibo['joined']) + 1296000 ) > time() ) OR ( intval($member_spasibo['reputation']) < 0 ) ) { $this->ipsclass->print->redirect_screen( $this->ipsclass->lang['thx_out_of_permissions'], "showtopic={$topic_id}&view=findpost&p={$post_id}" ); } А вот что делать с яваскриптом вообще понять не могу В шаблонах нажатие кнопки спасибо и вызов ява скрипта: <span id='thank_button{$post}'><a href="{$this->ipsclass->base_url}act=thanks&type=add&f={$this->ipsclass->input['f']}&t={$this->ipsclass->input['t']}&pid={$post}" title="Спасибо" onclick="return add_thanks({$post}, {$member_id});"><img src='style_images/<#IMG_DIR#>/thanks.gif' border='0' alt='Спасибо' /></a></span> Сама функция яваскрипта:
  12. Такс значит пасс_хеш сверяется с мембер_логин_кей. Stronghold cookie - это я так понимаю те куки в настройках с привязкой к географии. Это у меня отключено, также как и проверка по ip. Первое я возжможно еще и включу, не разбирался с этой настройкой еще. Мне нужно подумать и еще раз просмотреть всю цепочку авторизации. Вообще я так понимаю мембер_логин_кей не меняется во время смены пароля? Т.е. поидее он должен меняться, тогда у злоумышленника первым слетает сессия, дальше идет проверка по куке пасс_хеш и тут тоже облом т.к. мембер_логин_кей сменен. Если же при смене пароля мембер_логин_кей не меняется - то злоумышленник будет сидеть в акке до истечения срока действия мембер_логин_кея, а это 7-30 дней. Также интересует что за функция и где описана $member['member_login_key'] = $this->ipsclass->converge->generate_auto_log_in_key();
  13. habahaba изготовил мне модуль автосмены. Отредактировал его как мне нужно и запустил только что, надеюсь все пройдет удачно
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.