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 :: Функция запомнить меня

 PHP.SU

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


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

> Описание: Как сделать безопасную функцию запомнить меня
vanicon
Отправлено: 24 Апреля, 2010 - 09:40:16
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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




Есть форма и функция запомнить меня:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <form action="index.php" id="form" method="post">
  3. <label>Пароль</label><br>
  4. <input name="password" type="password" maxlength="15">
  5. <label>Имя пользователя</label><br>
  6. <input name="login"  type="text" maxlength="15">
  7. <label><input name="save" type="checkbox" value='1'> Запомнить меня</label>
  8.  

Скрипт обрабатывающий форму:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. if (isset($_POST['save'])){
  3. setcookie("login", $_POST["login"], time()+9999999);
  4. setcookie("password", $_POST["password"], time()+9999999);
  5. }


И пароль и логин хранится в куках браузера , а если хакер прочитает куки этого браузера, а там все написано: имя пользователя, пароль и сайт на котором нужно войти.

Подскажите как этого избежать?


-----
Так было, так есть и так будет
 
 Top
Prog
Отправлено: 24 Апреля, 2010 - 14:03:38
Post Id



Частый гость


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


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




А чего не пользоваться сессиями ?
 
 Top
vanicon
Отправлено: 24 Апреля, 2010 - 15:57:29
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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




Как в этом случае можно использовать сессии ?


-----
Так было, так есть и так будет
 
 Top
Монстр_11111
Отправлено: 24 Апреля, 2010 - 16:37:01
Post Id



Частый гость


Покинул форум
Сообщений всего: 248
Дата рег-ции: Нояб. 2009  


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




Зашифровываешь пароль функцией md5 и ставишь на куки.
setcookie('password', md5($_POST['password']), time()+9999999);
PS Сохраняй пароль в шифрованном виде не только в куках,но и в базе.
 
 Top
markus4
Отправлено: 24 Апреля, 2010 - 17:09:53
Post Id



Гость


Покинул форум
Сообщений всего: 78
Дата рег-ции: Март 2010  


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




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

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

Вот так реализована защита кукиса у меня:
Во первых кукис должен быть один, а не 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
Prog
Отправлено: 24 Апреля, 2010 - 18:37:43
Post Id



Частый гость


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


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




Тут сессии не помогут , если ты хочешь что бы запоминало надолго то ток куки .
 
 Top
Монстр_11111
Отправлено: 24 Апреля, 2010 - 21:28:32
Post Id



Частый гость


Покинул форум
Сообщений всего: 248
Дата рег-ции: Нояб. 2009  


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




markus4 Вероятно вы опытный кодер, но по мне ваш способ танец с бубном какой то ) Раз уж так, то можно просто сделать соль в куках с айпи и юзер агентом посетителя у которого эти куки хранятсо.
 
 Top
markus4
Отправлено: 24 Апреля, 2010 - 23:05:45
Post Id



Гость


Покинул форум
Сообщений всего: 78
Дата рег-ции: Март 2010  


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




Можно и так конечно. Кто спорит. Главное не забывать, что всё привычное стареет со временем. Насчёт опытного пичипи кодера - ошибаетесь. Пичипи я всего месяц как курю, и то урывками. Надо было реализовать отстук (в ботнете). Кто действительно опытный пичипи кодер с незамутнёным взглядом - так это JustUser.


-----
Нет вокруг ничего кроме бесконечного журчания опкодов вселенной...
 
 Top
vanicon
Отправлено: 25 Апреля, 2010 - 09:19:35
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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




Как сделать соль в куках с айпи и юзер агентом посетителя?


-----
Так было, так есть и так будет
 
 Top
JustUserR
Отправлено: 25 Апреля, 2010 - 12:11:28
Post Id



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


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


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




markus4 пишет:
Пичипи я всего месяц как курю, и то урывками. Надо было реализовать отстук (в ботнете). Кто действительно опытный пичипи кодер с незамутнёным взглядом - так это JustUser.
Благодарю Улыбка Однако в данной темы вы али весьма исчерпывающий и правильный ответ - в общем случае защита cookies заключается в следующиих позициях - если в них хранятся логин и пароль то в них также должен храниться и определенных набор данных подставляемых со стороны сервера (Хотя они могут частично передаваться туда от клиента с помощью Iframe/AJAX) и вся cookie должна быть захеширована (По сути безвозвратно зашифрована) - и тогда если злоумышленник поставт себе такую то он с одной стооны не сможет вытащить пароль (Ибо захеширована безвозвратно) и не может поставить ее себе (Ибо часть его параментов не сходятся) Но с третьей стороны если хакер украл данный cookie то он скорее всего может узнать и информацию пользователя - в том числе версию браузера и тд и сэмулировать себе такие же - поэтому основной упор можно делать на IP (Одно только неудобство если у пользователя IP-адрес меняется слишком часто) и на локальное время (То есть ограниченное время действие cookie - такая защита похоже на защиту в различных картах оплаты/кредитных картах которые имеют скок активации/действия)


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



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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




Обрабатывает форму:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $ip=getenv("HTTP_X_FORWARDED_FOR");
  3. if (empty($ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }
  4. $password = md5(md5($_POST["password"]).$ip);
  5.  
  6. if (isset($_POST['save'])){
  7. setcookie("login", $_POST["login"], time()+9999999);
  8. setcookie("password",$password, time()+9999999);
  9. }
  10. ?>
  11.  

Сама форма:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <form action="index.php" id="form" method="post">
  3. <label>Пароль</label><br>
  4. <input name="password" type="password" maxlength="15">
  5. <label>Имя пользователя</label><br>
  6. <input name="login"  type="text" maxlength="15">
  7. <label><input name="save" type="checkbox" value='1'> Запомнить меня</label>
  8. </form>

А так можно будет расшифровать пароль, если хакер скачает файл с куками.
Или если он просто его скачает и поставит себе, сможет ли он войти и сменить пароль.

(Отредактировано автором: 25 Апреля, 2010 - 16:35:04)



-----
Так было, так есть и так будет
 
 Top
JustUserR
Отправлено: 26 Апреля, 2010 - 01:46:17
Post Id



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


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


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




vanicon пишет:
А так можно будет расшифровать пароль, если хакер скачает файл с куками.
Или если он просто его скачает и поставит себе, сможет ли он войти и сменить пароль.
Расшифровать данный файл cookie и вытащить из него пароль не получится в любом случае поскольку md5 это безвозвратное хеширование (Конечно нет ничего невозможного и md5 можно редуцировать http://ru[dot]wikipedia[dot]org/wiki/Радужные_таблицы ) Поэтому даже если хакер сможет скопировать себе ваш cookie-файл и параметры вашего браузера и ОС для полного сходства - то в вашем распоряжении остается IP-адрес и время действия cookie (Последнее особенно актуально - поскольку позволяет защищаться от bruteforce-методов подбора)


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
markus4
Отправлено: 26 Апреля, 2010 - 07:56:31
Post Id



Гость


Покинул форум
Сообщений всего: 78
Дата рег-ции: Март 2010  


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




Добавлю, что алгоритм можно написать так, что использовать перебор не получится, т.к. после первого же неправильного варианта запись о кукисе юзера уничтожится, и ему в любом случае нужно будет ввести пароль и получить новый кукис. Что конечно же намного повышает безопасность.


-----
Нет вокруг ничего кроме бесконечного журчания опкодов вселенной...
 
 Top
JustUserR
Отправлено: 26 Апреля, 2010 - 12:47:59
Post Id



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


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


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




markus4 пишет:
Добавлю, что алгоритм можно написать так, что использовать перебор не получится, т.к. после первого же неправильного варианта запись о кукисе юзера уничтожится, и ему в любом случае нужно будет ввести пароль и получить новый кукис. Что конечно же намного повышает безопасность.
В этом вы конечно правы - однако это тоже весьма стнадартный механихм защиты применяющийся в технология безопасности (Тот же самый PIN-код который можно вводить как правило 3 раза) Конечно для пользователя это может создать небольшие неудобства - если качество интернета плохое и ему приходится частенько переподключаться и получать новый IP-адрес - но безопасность дороже
vanicon А если на вашем сайте безопасность чрезмерно важна то можете использовать еще более сложные методы - например специальный ActiveX-элемент с цифровой подписью При этом ключ генерируется не на основе просто IP-адреса и скажем разрешения экрана - ведь ActiveX-элемент может получать дотсуп к данным системы и производить более точную идентификацию пользователя


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
vanicon
Отправлено: 26 Апреля, 2010 - 17:08:02
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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




А можно по подробней про ActiveX.


-----
Так было, так есть и так будет
 
 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