Функция "Запомнить меня" как угроза безопасности.

TheWanderer

Новичок
Функция "Запомнить меня" как угроза безопасности.

На одном из западных форумов по безопасности в PHP я видел точно такую же тему. Ссылку сейчас привести не могу, да и не важно это - найти-то я ее найду, но хотелось бы обсудить эту же тему так сказать в русскоязычном сообществе. Ведь не опытом западных гуру единым жив человек ;)
Поясню проблему. Например, злоумышленник получил хэш от пароля администратора. Как - неважно. Важно, что если он даже и может заменить его на свой, то делать этого не хочет - засекут, в итоге потеряет систему. Проблема вот в чем. Без функции "Запомнить меня", он этот хэш фактически никак применить не сможет. В конце-концов, именно хэш как правило хранят в кукишах для функции "Запомнить меня". Возможны вариации, вроде хэша от хэша плюс какой-то персональный идентификатор сайта (по-моему, такое я видел в e107). Но в итоге это помогает помогает слабо. Пойдем дальше. Пусть salt генерируется для каждого пользователя отдельно. Но его нужно где-то хранить. Просто ради интереса предположим, что хакер имеет доступ и к нему (или у него полностью готовый кукиш администратора). В итоге - успешная атака, хакер в системе, админ может об этом даже не подозревать.
Итак, теперь извечный вопрос: "Что делать?" Мне на ум приходит только повторный запрос пароля для любых административных действий. Возможно, у вас есть какие-то другие идеи. Интересно бы было выслушать.

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

tony2001

TeaM PHPClub
о чем это? что за ерунда?
с каких пор админа пускают по куке?
 

Фанат

oncle terrible
Команда форума
отключи функцию "запомнить меня" как угрозу безопасности.
всего делов-то.
любят люди себе проблему из пальца высосать.

ЗЫ. админку тоже отключи. Ты не представляешь, какая это угроза, если хакер раздобудет пароль.
 

TheWanderer

Новичок
И сайт лучше тоже отключить. Запустить на локалхосте и тихонько смоотреть в одиночку - там неугомонный хакер только один и ничего страшного он с сайтом не сделает. :)
 

demongloom

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

Crazy

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

chillz

Guest
Автор оригинала: Crazy
В основе треда лежит порочное предположение, что код, используемый для реализации долговременной сессии ("запомни меня") обязательно должен совпадать с хэшем пароля.
Согласен.
При логине по паролю генерим UID в мд5, пишем в куку, а в базу, допустим (или в файл) кладем md5($cookie_uid$ИДЕНТИФИКАТОР_ПОЛЬЗОВАТЕЛЯ).
а если кука стоит при входе на сайт, скрипт уже плюсует какой-либо идентификатор и сверяет с имеющимся в базе.
 

Popoff

popoff.donetsk.ua
Автор оригинала: Crazy
В основе треда лежит порочное предположение, что код, используемый для реализации долговременной сессии ("запомни меня") обязательно должен совпадать с хэшем пароля.
И, как следствие, то предположение, что идентификатор этой долговременной сессии нельзя изменять во времени.
 

Dvous

Новичок
=) Веселая угроза безопасности. От не чего делать,
мог бы и подумать как это все подставить практически.
И действительно в некоторых системах в куки записывается вовсе не хеш пароля, а бывает записывается и IP адрес тоже...
 

TheWanderer

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

Krishna

Продался Java
Вот тебе безопасная относительно безопасный механизм авторизации:

Спрашиваем у пользователя логин и пароль, после чего заводим сессию, записываем в неё uid юзера и ip-адрес клиента (откуда работает браузер). А на стороне клиента в куку кладем id сессии и более ничего.
При дальнейшем соединении клиент передает серверу id сессии, беря его из куки. Тот, сверяется, соответствует ли ip клиента тому, что указан в этой самой сессии. Если да - берет из неё uid.
Вот такая система.
 

ONK

Пассивист PHPСluba
Krishna, Относительно безопасной может быть автоматическая авторизация по одноразовому идентификатору, меняющемуся при каждой авторизации. Но даже при этом доступ к опасным функциональным возможностям должен производиться только после полной авторизации.
 

valyala

Новичок
TheWandererФункцию "запомнить меня" следует избегать, если мало знаком с информационной безопасностью и не представляешь, каким образом можно скомпрометировать систему, в которой используется данная функция.

Главная угроза при использовании данной функции не в том, что злоумышленник сможет перехватить или украсть пользовательские куки, а в том, что злоумышленник может выполнить любые действия от имени авторизованного в системе пользователя. Для этого ему не обязательно знать содержимое кук - необходимо лишь заставить пользователя зайти на специально созданную страницу, содержащую автоматически отправляемую форму, предварительно заполненную необходимыми злоумышленнику данными. Более подробно об этом можно почитать по следующим ссылкам:
http://phpclub.ru/talk/showthread.php?postid=419896#post419896
http://phpclub.ru/talk/showthread.php?threadid=54160
 

Dvous

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

SiMM

Новичок
> можно просто сделать проверку, чтобы система не принимала формы с других ресурсов, а принимала только "свои" формы.
Можно. Но REFERER'а может и не быть вообще - так что хз, откуда оно на самом деле пришло.
 

kvf77

Red Devil
SiMM

ну опять же в скрытом поле давать md5 строку а потом ее проверять - впечатывание туда левой строки по идее должно отсечь форму
 

kruglov

Новичок
Латал я тут недавно один форум, на который влезли через "запомнить пароль". Так там для взлома использовался не браузер, а php-скрипт, открывающий сокетное соединение с сайтом и отсылающий все нужные хакеру запросы.

Это по поводу чужих форм и пр.

p.s. там, правда, была mysql-injection через перебор кук. Авторы форума и не подумали, что куки тоже подделать можно, записав туда от себя что угодно.
 
Сверху