Доброго времени суток, друзья ! Решил сделать алгоритм "вечной авторизации" через кукки. Проще говоря, "запомнить меня". Шифрую в кукки пароль и ещё некоторые данные . Когда человек заходит на сайт , то запускаем сессию . Взлом через кукки до сих пор актуален. Просто нужно украсть их и вставить в свой браузер . Вопрос: Как через PHP или с помощью других методов запретить повторное использование кукки ? https://xakep.ru/2013/07/23/60961/
@RomanVitte, ты из вечной авторизации хочешь сделать одноразовую? Есть вариант проще... ничего не делать.
ты о чем ? Мне как раз тоже интересна логика защиты в данном направлении. Т.к в своем говне давно обнаружил дыру на эту тему. По айпи адресу и читать не хочу - это бред будет как раз "одноразовый". --- Добавлено --- Человек сидит за компом, авторизованный в одном сервисе. В один момент ему приспичило отойти. Тем временем недруг пользуется моментом, жмет F12 и запоминает хеш куки + чекая что за браузер.
@MouseZver, там логики вагон и маленькая тележка, разрывать соединение по IP нельзя, но как "флаг" контролировать нужно, и при смене IP запускать алгоритм проверки "свой-чужой". Тема достаточно сложная, но если раскрывать секреты, они перестанут быть секретами, поэтому алгоритм нужен грубо говоря каждому свой. И банальным запретом повторного использования куки тут не отделаешься.
хм... Открываем статью (2013 год, ужос), переходим по ссылке, где чувак описывает вектор атаки, кратко: 1. Открываем сайт, логинемся. 2. Копируем установленные куки. 3. Выходим из сайта 4. Восстанавливаем куки. 5. Профит! 6. remember token
Чтобы кука имела предельный срок действия, в сам механизм куки заложено поле со сроком её прокисания. На стороне PHP это выглядит как параметр expire функции setcookie. Можно поделать, конечно, но простой копи-пейст уже не канает. Используйте срок действия куки. Кроме того, зашифрованное в куки значение может включать в себя метку времени. Когда [ старая/чужая ] кука будет расшифрована на стороне сервера, можно сравнить эту метку с текущим временем и признать значение невалидным. Чтобы подделать такое, злопыхателю понадобится знать закрытый ключ, а это почти нереально. Используйте срок действия в теле зашифрованной куки. Ну или не зашифрованной, а подписанной секретным ключем. Понятно объясняю? Допустим кука содержит такое значение, сериализованное как json или любым другим способом: data: [user_id: 123, expire: '2019-06-30 18:20:00'], hash: 234567lkjhg34567l;kjhgxcvbn хеш вычислен из значения data + секретный ключ. чтобы проверить такую подпись, вычисляем хеш заново. если злопыхатель подделает любую часть data, хеш не сойдётся. если хеш верный, тогда проверяем значение expire, не прокисли ли эти данные. --- Добавлено --- вот пароль не стоит помещать в куку, правда! просто незачем.
И ? в чем прикол ? Ведь недруг значения зашифрованные скомуниздил, время жизни аналогичное поставил... а они такие же как у жертвы. --- Добавлено --- Мои данные на этом форуме Куки: xf_user Срок: Sun, 28 Jul 2019 13:38:23 GMT - от нее толку 0 Значение: 40235%2Cf72e0024747b183b350ade87c5d9bc85dbb47191 (делете сессионные куки) Браузер - Мозилла(чистая) ласт Зайду сегодня в 23 часа вечера по мск. Если зайдет кто - нибудь, напишите тут хрень всякую.
«Вечная авторизация» – зло. Используй серверный expire на несколько часов (с продлением). Вот что у меня в комментах написал товарищ, занимающийся защитой: http://gency.ru/comment/64 Плюс можно периодически менять ключ. А то он у меня там только при явном выходе меняется! Т.е. даже при повторном входе не меняется Это было сделано специально, чтобы можно было держать несколько девайсов одной сессией.
@MouseZver, все выкладывай php.ru PHPSESSID .php.ru _ym_uid .php.ru _ym_d .php.ru _ym_isad php.ru xf_user php.ru xf_session --- Добавлено --- Хотя _ym_* – это походу Метрика.
xf_user отвечает за все, если ты куришь тему. Не удержался, проверил через другой комп... 40235%2Cf72e0024747b183b350ade87c5d9bc85dbb47191 Зашел.. --- Добавлено --- Хоть обхешируйся вдоволь со значением на сервере, не повлияет на работу в чужом ОС. Тупо лишние движения в скриптах - толку 0
Нафиг тогда этому XF вообще нужна кука PHPSESSID? Хотя чему я удивляюсь?! Лень и дебилизм всегда идут с нами по жизни
Мне вообще система с сессионной кукой + "запомни меня" кукой кажется костылём. Можно было обойтись одной записью с нужным атрибутом устаревания. А что до копирования, ну этому можно сопротивляться через "отпечаток" (fingerprint).
Очевидно же, для поддерживания сессии "на данный момент". Удалив xf_user, ничего не изменится, пока ты не перезапустишь браузер. --- Добавлено --- Там так же свои косяки.