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
Форумы портала PHP.SU :: Версия для печати :: Функция запомнить меня
Форумы портала PHP.SU » » HTTP и PHP » Функция запомнить меня

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

1. vanicon - 24 Апреля, 2010 - 09:40:16 - перейти к сообщению
Есть форма и функция запомнить меня:
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. }


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

Подскажите как этого избежать?
2. Prog - 24 Апреля, 2010 - 14:03:38 - перейти к сообщению
А чего не пользоваться сессиями ?
3. vanicon - 24 Апреля, 2010 - 15:57:29 - перейти к сообщению
Как в этом случае можно использовать сессии ?
4. Монстр_11111 - 24 Апреля, 2010 - 16:37:01 - перейти к сообщению
Зашифровываешь пароль функцией md5 и ставишь на куки.
setcookie('password', md5($_POST['password']), time()+9999999);
PS Сохраняй пароль в шифрованном виде не только в куках,но и в базе.
5. markus4 - 24 Апреля, 2010 - 17:09:53 - перейти к сообщению
Рискну поспорить...
Если хакер украдёт кук, написанный так как написал автор, тогда всё. Даже если он зашифрован будет. Хакер просто поставит его себе и всё. Потом зайдёт и сменит пароль.

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

Вот так реализована защита кукиса у меня:
Во первых кукис должен быть один, а не 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, вид операционки...
6. Prog - 24 Апреля, 2010 - 18:37:43 - перейти к сообщению
Тут сессии не помогут , если ты хочешь что бы запоминало надолго то ток куки .
7. Монстр_11111 - 24 Апреля, 2010 - 21:28:32 - перейти к сообщению
markus4 Вероятно вы опытный кодер, но по мне ваш способ танец с бубном какой то ) Раз уж так, то можно просто сделать соль в куках с айпи и юзер агентом посетителя у которого эти куки хранятсо.
8. markus4 - 24 Апреля, 2010 - 23:05:45 - перейти к сообщению
Можно и так конечно. Кто спорит. Главное не забывать, что всё привычное стареет со временем. Насчёт опытного пичипи кодера - ошибаетесь. Пичипи я всего месяц как курю, и то урывками. Надо было реализовать отстук (в ботнете). Кто действительно опытный пичипи кодер с незамутнёным взглядом - так это JustUser.
9. vanicon - 25 Апреля, 2010 - 09:19:35 - перейти к сообщению
Как сделать соль в куках с айпи и юзер агентом посетителя?
10. JustUserR - 25 Апреля, 2010 - 12:11:28 - перейти к сообщению
markus4 пишет:
Пичипи я всего месяц как курю, и то урывками. Надо было реализовать отстук (в ботнете). Кто действительно опытный пичипи кодер с незамутнёным взглядом - так это JustUser.
Благодарю Улыбка Однако в данной темы вы али весьма исчерпывающий и правильный ответ - в общем случае защита cookies заключается в следующиих позициях - если в них хранятся логин и пароль то в них также должен храниться и определенных набор данных подставляемых со стороны сервера (Хотя они могут частично передаваться туда от клиента с помощью Iframe/AJAX) и вся cookie должна быть захеширована (По сути безвозвратно зашифрована) - и тогда если злоумышленник поставт себе такую то он с одной стооны не сможет вытащить пароль (Ибо захеширована безвозвратно) и не может поставить ее себе (Ибо часть его параментов не сходятся) Но с третьей стороны если хакер украл данный cookie то он скорее всего может узнать и информацию пользователя - в том числе версию браузера и тд и сэмулировать себе такие же - поэтому основной упор можно делать на IP (Одно только неудобство если у пользователя IP-адрес меняется слишком часто) и на локальное время (То есть ограниченное время действие cookie - такая защита похоже на защиту в различных картах оплаты/кредитных картах которые имеют скок активации/действия)
11. vanicon - 25 Апреля, 2010 - 15:52:55 - перейти к сообщению
Обрабатывает форму:
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>

А так можно будет расшифровать пароль, если хакер скачает файл с куками.
Или если он просто его скачает и поставит себе, сможет ли он войти и сменить пароль.
12. JustUserR - 26 Апреля, 2010 - 01:46:17 - перейти к сообщению
vanicon пишет:
А так можно будет расшифровать пароль, если хакер скачает файл с куками.
Или если он просто его скачает и поставит себе, сможет ли он войти и сменить пароль.
Расшифровать данный файл cookie и вытащить из него пароль не получится в любом случае поскольку md5 это безвозвратное хеширование (Конечно нет ничего невозможного и md5 можно редуцировать http://ru[dot]wikipedia[dot]org/wiki/Радужные_таблицы ) Поэтому даже если хакер сможет скопировать себе ваш cookie-файл и параметры вашего браузера и ОС для полного сходства - то в вашем распоряжении остается IP-адрес и время действия cookie (Последнее особенно актуально - поскольку позволяет защищаться от bruteforce-методов подбора)
13. markus4 - 26 Апреля, 2010 - 07:56:31 - перейти к сообщению
Добавлю, что алгоритм можно написать так, что использовать перебор не получится, т.к. после первого же неправильного варианта запись о кукисе юзера уничтожится, и ему в любом случае нужно будет ввести пароль и получить новый кукис. Что конечно же намного повышает безопасность.
14. JustUserR - 26 Апреля, 2010 - 12:47:59 - перейти к сообщению
markus4 пишет:
Добавлю, что алгоритм можно написать так, что использовать перебор не получится, т.к. после первого же неправильного варианта запись о кукисе юзера уничтожится, и ему в любом случае нужно будет ввести пароль и получить новый кукис. Что конечно же намного повышает безопасность.
В этом вы конечно правы - однако это тоже весьма стнадартный механихм защиты применяющийся в технология безопасности (Тот же самый PIN-код который можно вводить как правило 3 раза) Конечно для пользователя это может создать небольшие неудобства - если качество интернета плохое и ему приходится частенько переподключаться и получать новый IP-адрес - но безопасность дороже
vanicon А если на вашем сайте безопасность чрезмерно важна то можете использовать еще более сложные методы - например специальный ActiveX-элемент с цифровой подписью При этом ключ генерируется не на основе просто IP-адреса и скажем разрешения экрана - ведь ActiveX-элемент может получать дотсуп к данным системы и производить более точную идентификацию пользователя
15. vanicon - 26 Апреля, 2010 - 17:08:02 - перейти к сообщению
А можно по подробней про ActiveX.

 

Powered by ExBB FM 1.0 RC1