Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Функция запомнить меня [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): « 1 [2] 3 »   

> Описание: Как сделать безопасную функцию запомнить меня
JustUserR
Отправлено: 27 Апреля, 2010 - 13:14:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




vanicon пишет:
А можно по подробней про ActiveX.
Использование ActiveX-элементов дает гораздо более широкие возможности чем классический клиентский JS-скрипт - по той причине что ActiveX-элемент является скомпилированной программой (Написанной например на C/C++ со всеми вытекающими возможностями) со специфическим API для взаимодействия с браузером и страницей
Из минусов вы получаете только необходимость единоразовой загрузки и установки ActiveX-элемента пользователем - а из плюсов наличие полноценной Win32-программы для своих действий по защите безопасности
К примеру для целей безопасности ActiveX-элемент применяется в Webmoney как WM Client Acceptor - а ранее на нем была построена вся авторизация


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Xmaster
Отправлено: 06 Августа, 2011 - 20:58:14
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Подниму топик. Тот же вопрос. Можно ли сделать "запомни меня" без записи пароля и логина в куки? Как?

Пробовал сделать флаг в куках, 1 -активна функция, 0 - не активна. Но не смог реализовать проверку Улыбка
PHP:
скопировать код в буфер обмена
  1.  
  2. if(!empty($_SESSION['authorized']) && $_COOKIE['flag']==0)
  3. {
  4.         $_SESSION = array();
  5.         session_destroy();
  6. }


как то так, но такой код выкидывает постоянно пользователя с сайта, при обновлении страницы...
 
 Top
DeepVarvar Супермодератор
Отправлено: 06 Августа, 2011 - 21:07:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Археолог Закатив глазки
 
 Top
Xmaster
Отправлено: 06 Августа, 2011 - 21:12:32
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Вопросы со временем не меняются Подмигивание
 
 Top
58545256
Отправлено: 04 Июня, 2014 - 12:11:46
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




markus4 пишет:
Рискну поспорить...
Если хакер украдёт кук, написанный так как написал автор, тогда всё. Даже если он зашифрован будет. Хакер просто поставит его себе и всё. Потом зайдёт и сменит пароль.

Я тут написал на досуге статейку по защите и привязки, есть очень интересные решения, главное, протестированы. Позже выложу тут.

Вот так реализована защита кукиса у меня:
Во первых кукис должен быть один, а не 2 как у тебя:

$coock_text = $login."+".$pass;
// Символ плюса для будущего разделения.

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

$coock_text = $login."+".$pass."+".$time.$brouzer.$screan;
// 3 последних параметра пишем не прямо, а в виде их кодов, так короче.

В данной ситуации:
a=3 (разновидности браузеров)
// я кратенько, без подвидов, иначе ещё больше... IE, Opera, Лиса.

b=5 ( 5 - это варианты скрина : 600Х800, 1024Х768 и т.д. всего допустим 5)

Общая вероятность a Х b = 15

А теперь = шифруем кукис.

Итак, хакер украл мой кукис. Расшифровать его он не сможет, т.к. я использую собственный php-алгос, шифрующий 2048-битным ключом с 2048 битным раундом.
О расшифровке говорить смешно, это не md5.

Хакеру остаётся поставить себе мой кукис "как есть", и рискнуть.

Вариантов немного, всего 15, скажете вы...
А много и не надо, т.к. совпадение должно быть с первого раза!
Если совпадения нет - кукис на сервере немедленно уничтожается, и выводим товарищу окно запроса. если это настоящий пользователь - ничего страшного, он просто зашел с другого компа, снова введёт пароль, не обидится.
А если хакер - облом.
Итак, что мы имеем: у хакера шанс 1 из 15 - сыграть в рулетку.

Далее направление понятно - увеличить вероятность вариантов.
Мы её и увеличиваем: параметр Локальное_Время_Юзера.
Мы по умолчанию считаем, что он сидит на одном месте в своём городе, и не пересекает часовые пояса.
с=24
вероятность = (a X b X c) = 360
Это уже неплохо.

Ну, если мало 360, на очереди - маска IP, вид операционки...


Мне вот интересно (сам сейчас мучаюсь - вопрос передачи логина пароля решил с помощью блоуфиш - теперь вот пытаюсь обезопасить куку от подмены) - это получается каждый раз, чтобы проверить на сервере подлинность автора куки, нужно с отправкой каждого запроса на сервер посылать все эти параметры (срины, часовой пояс, и т.д.)?.. Ведь эти переменные можно получить только на клиенте, в отличие от переменных суперглобального массива пхп (айпи, браузер...) И нужно ли привязывать в куку логин+пароль? Или достаточно сгенерировать для каждого запроса случайный (но уникальный для каждого юзера) ид, который менять при каждом запросе и хранить на сервере (что-то наподобие динамического идентификатора пользователя) ? Заранее спасибо.
 
 Top
Мелкий Супермодератор
Отправлено: 04 Июня, 2014 - 12:32:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




58545256 пишет:
использую собственный php-алгос

http://habrahabr[dot]ru/post/181372/

58545256 пишет:
нужно с отправкой каждого запроса на сервер посылать все эти параметры (срины, часовой пояс, и т.д.)?..

Да. Потому они бесполезны, т.к. подделываются элементарно. (если есть возможность достать куку - нет проблем достать весь запрос)

58545256 пишет:
в отличие от переменных суперглобального массива пхп (айпи, браузер...)

Браузер вы знаете тоже только со слов клиента.

58545256 пишет:
Или достаточно сгенерировать для каждого запроса случайный (но уникальный для каждого юзера) ид, который менять при каждом запросе и хранить на сервере (что-то наподобие динамического идентификатора пользователя) ?

Не "достаточно", а необходимо. Только токен. При том, с возможностью в одностороннем порядке его инвалидировать (кнопка "выйти на всех устройствах")

Привязываться ли к IP - если вы полностью понимаете, насколько это неудобно и можете доказать, что для вас это оправдано. Если вы банк, например.
Плюс не поможет от MitM в принципе. А MitM - самый удобный способ раздобыть куку.


-----
PostgreSQL DBA
 
 Top
58545256
Отправлено: 04 Июня, 2014 - 13:53:15
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Мелкий пишет:
Браузер вы знаете тоже только со слов клиента.

Согласен, браузер я привел как дополнительную, не основную защиту. А по поводу айпи (проблему с прокси и динам ип я знаю...) - а что если сделать галку "Безопасный вход" и сохранять данный выбор в записи юзера в бд. Если безопасный - проверять по полному айпи, опасный - использовать адрес сети (проверять только по первым 3м знака айпи)? Так сказать...переложить ответственность на юзера (или все же не стоит перекладывать на него столь тяжелую ношу)...Система предполагается не настолько открытая, как, например, соц. сети...
Мелкий пишет:
Только токен.

Я еще не гуру веб программирования... Что вы имели в виду под токенами?... Я намеревался делать нечто наподобие: например $дин_ид = мд5(микротайм().логин); или после первой итерации изменить на $дин_ид = мд5(микротайм().$дин_ид); Логин сюда приплел для...так сказать...создания уникального для одного юзера ид...

Да и вообще, какой наиболее надежный способ защиты от кражи куки вы бы посоветовали?

И что вы думаете о надежности описанного метода авторизации (хотя по мне так аутентификации) в данной статье?
http://habrahabr[dot]ru/sandbox/20718/

(Отредактировано автором: 04 Июня, 2014 - 13:57:17)

 
 Top
Мелкий Супермодератор
Отправлено: 04 Июня, 2014 - 14:46:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




58545256 пишет:
Да и вообще, какой наиболее надежный способ защиты от кражи куки вы бы посоветовали?

SSL везде и флаги httponly, secure.
Первый - дыра та ещё по своей идее, но стандарт.

58545256 пишет:
Что вы имели в виду под токенами?...

(Псевдо)случайный набор символов, уникальный для всей системы.

58545256 пишет:
И что вы думаете о надежности описанного метода авторизации (хотя по мне так аутентификации) в данной статье?

Почти четыре года в песочнице - уже о многом говорит.
Описан механизм, частично реализующий SSL. Частично - т.к. направление только пользователь->сервер.
Бесполезен при mitm, бесполезен при xss. Немного полезен при пассивной прослушке.


58545256 пишет:
если сделать галку "Безопасный вход"

Блокировка по ip неудобна пользователю в принципе.
Точную статистику с работы не приведу, но включают фильтр входа по ip значительно менее 1 процента пользователей. А ведь с деньгами работаем.
И я сам никогда не включаю фильтр по ip - я не знаю, будет ли у меня этот ip через неделю и как тогда получить доступ. Или если внезапно понадобится зайти с другого места.
Как рабочую версию можно рассматривать создание отдельного пароля и настроек фильтрации для редких и важных действий - смена пароля, чего там у вас важно ещё. Но тогда встаёт удивительный вопрос - как менять этот второй пароль и настройки фильтрации.


-----
PostgreSQL DBA
 
 Top
58545256
Отправлено: 04 Июня, 2014 - 16:10:24
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




ssl пока нет возможности использовать (надо покупать сертификат. Без него - пользователю будет говориться о неподписанном небезопасном... - не надо). Если я вас еще не окончательно достал...какой более надежный аналог того метода с блофишем вы можете посоветовать? Не ссл. Хотя бы название, в идеале ссылку статьи...? Заранее большое спасибо!)
 
 Top
Мелкий Супермодератор
Отправлено: 04 Июня, 2014 - 16:41:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Есть такая удивительная вещь:
http://habrahabr[dot]ru/post/106252/
http://habrahabr[dot]ru/post/127643/


-----
PostgreSQL DBA
 
 Top
58545256
Отправлено: 05 Июня, 2014 - 08:03:29
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




То есть, ... вы бы все таки посоветовали обратить внимание на ссл. Как я понимаю, используя ссл, защиту от подмены куки тоже необходимо делать? А вот нужда в том методе с использованием блоуфиш отпадает. Или все же лучше как дополнительный подуровень безопасности оставить?.
И еще такой вопрос: Естественно пароль...да думаю и логин в бд необходимо хранить в виде хеша. Но стоит ли их при этом подсолить? А соль хранить в защищенной папке? Тогда при взломе бд они не смогут прогнать их по радужным таблицам.
И еще где то находил совет - использовать более медленные методы хеширования (а, если они не так надежны, обернуть их например в мд5). Пример: в бд будем хранить мд5(мд2(мд5(pass) + солт)). Это приводит к увеличению времени перебора. Стоит ли так делать?
(Добавление)
Мелкий пишет:
И я сам никогда не включаю фильтр по ip - я не знаю, будет ли у меня этот ip через неделю и как тогда получить доступ.


Я имел в виду не совсем фильтр по айпи, нечто более мягкое...Проверку по айпи. Просто в момент аутентификации сохраняем айпи пользователя. И потом каждый раз при обращении к серверу - проверяем совпадение переменной из суперглобального массива с айпи из сессии. Совпал - вперед и с песней, нет - отправляем на страницу авторизации и сохраняем на всякий ип в логи (ну может что и пожестче...например - блокировка ип на полчаса...или что нибудь с капчей...) Согласен, тут возникает проблема с динамик айпи (пользователь будет слегка раздражен каждый час переавторизовываться - тут мы ему даем выбор, кладем ответственность на него (знаю)) звучит глупо и слегка наивно...) - либо каждый час надежно, но переавторизовываться, либо менее надежно - будем проверять только адрес сети, но зато без переавторизации). А с прокси и с одним ип на всю ораву я пока не знаю как решить...
 
 Top
Мелкий Супермодератор
Отправлено: 05 Июня, 2014 - 09:43:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Разумеется, SSL. Один только алгоритм рукопожатия чего стоит.

58545256 пишет:
Как я понимаю, используя ссл, защиту от подмены куки тоже необходимо делать?

А вы попробуйте куку раздобыть для начала. Без MitM, организованным центром сертификации.
И никак вы от подмены куки не защититесь. Т.к. HTTP не предполагает сессии в принципе. Единственное достоверное, что мы знаем о пользователе - его IP. Но к нему привязывать нельзя.

По поводу паролей обсуждать нечего: http://docs.php.net/manual/en/fu...assword-hash.php (хинт) без вариантов.
Логин хэшировать - нафига? Вообще логин не делайте, раз вам он не нужен. email + пароль или телефон+пароль, в зависимости от потребностей, необходим и достаточен. А есть всякие авторизации через соцсети - и вообще можно об авторизации не думать.


-----
PostgreSQL DBA
 
 Top
58545256
Отправлено: 05 Июня, 2014 - 12:33:35
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Мелкий пишет:
А вы попробуйте куку раздобыть для начала. Без MitM, организованным центром сертификации.

Что такое "человек посередине" я знаю и понимаю...но только теоретически. А практически - пока силенок не хватит). А куки...а если их украсть непосредственно на аппарате пользователя?...Хотяяя...наверное, да. Если злоумышленник имеет доступ к пк юзера - у него считай уже есть логин пароль юзера...
Значит, при использовании ssl о подмене кук можно не задумываться?

Мелкий пишет:
По поводу паролей обсуждать нечего

password_hash конечно хорошо...Но он идет с 5.5. А на моем хвосте php 5.2... Или есть какие-то костыли-аналоги и к 5.2?

В общем, как я понял, только ссл?

И...если это не слишком нагло, не могли бы Вы привести ссылку на статью по созданию токенов (не хотелось бы самому накосячить... md5(uniqid('', true)) - сойдет?..)?
(Добавление)
И еще...по поводу ссл сертификатов. В той статье, что вы прислали, написано: " Но у StartSSL весьма интересный подход — сами сертификаты у них бесплатные, вы платите только за проверку вашей личности."
Это имеется в виду 2-й уровень верификации? Для снятия ограничений бесплатного сертификата? А для обычных нужд вполне достаточно бесплатного сертификата?

И ...Также отзыв сертификата будет стоить вам денег...То есть, если он будет не нужен...когда-то...Надо будет платить за его закрытие?...Вы не в курсе сколько?
 
 Top
Мелкий Супермодератор
Отправлено: 05 Июня, 2014 - 13:01:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Да, если есть доступ непосредственно к ПК пользователя, то хоть общифруйся, не поможет.

58545256 пишет:
А на моем хвосте php 5.2...

Обновляйте.
Тут 5.6 через несколько недель выходит - соответственно, даже 5.4 становится сильно устаревшим. 5.3 уже полгода не поддерживается, а 5.2 вообще много лет.

58545256 пишет:
И еще...по поводу ссл сертификатов /**/

К сожалению, не в курсе. Для личных проектов не нужны были, а для работы сертификаты купить не проблема.

У токенов весь прикол в уникальности и сложности подбора.
В мануале к uniqid, кстати, об этом написано:
Цитата:
This function does not generate cryptographically secure tokens, in fact without being passed any additional parameters the return value is little different from microtime(). If you need to generate cryptographically secure tokens use openssl_random_pseudo_bytes().

(к слову о том, что обновляться давно пора, openssl_random_pseudo_bytes >=5.3.0)


-----
PostgreSQL DBA
 
 Top
58545256
Отправлено: 05 Июня, 2014 - 13:24:16
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Ох и достал я уже, наверное, Вас...Ну уж раз начал, надо доставать до конца))
Мелкий пишет:
Обновляйте.

Йех...если б я знал как...искал сам - настолько ясных сведений, чтобы я рискнул вручную обновить на хостинге версию php, я не нашел...
Тут правда...был сначала на хосте пхп4 - так там даже джейсон_енкодер не было. Сначала костыль-заглушку использовал. Надоело - позвонил в тех поддержку. И, т.к. в условиях тарифа стояло пхп4, пхп5 - вопросил: а как бы 5й заиметь... Отвтили что-то типа - так вы сами можете обновить...ну да ладно - мы вам сами перезальем (как-то даже стыдно стало...хоть теперь и 5.2).
Как я в консольке управления не искал смены версии пхп - так и не нашел ничего. Так вот я к чему: они должны предоставить возможность обновления версии? Или от хостинга зависит?
Иииии...на локале для тестирования я использую денвер. А там в последней версии, как я посмотрел, используется 5.3. Поискал по поводу перезаливки новой версии - там что-то у половины одни косяки после этого выскакивают. У вас в закромах нету статьи о ... грамотной перезаливке пхп?
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB