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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
magistr
Отправлено: 15 Сентября, 2010 - 21:33:57
Post Id



Частый гость


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


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




Всем доброе время суток...
Вот пытаюсь сделать небольшой сайт и столкнулся с такой проблемой, а именно авторизации пользователей.
Кто как проверяет авторизованный пользователь или нет?
Вот что получилось у меня.
Это код формы авторизации:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $login_post =  mysql_escape_string($_POST['login']);
  4. $pass_post =   mysql_escape_string(md5($_POST['pass']));
  5. $submit = $_POST['submit'];
  6. if (isset($login_post) AND  isset($pass_post) AND isset($submit))
  7. {
  8.    $result = mysql_query("SELECT * FROM user WHERE login='$login_post' AND pass ='$pass_post'",$db);
  9.    $result_login = mysql_num_rows($result);
  10.          if($result_login == 0)
  11.           {
  12.                  SetCookie("avtorizirt","0",time()+360000,"/");
  13.                  SetCookie("login","");
  14.                  SetCookie("pass","");
  15.                  $avtorizirt = 0;
  16.                  header('Location:http://www.*.ru/no_avtorizirt.php?error=1');
  17.                  exit();
  18.                  
  19.           }
  20.           else
  21.           {
  22.                  
  23.                   SetCookie("avtorizirt","1",time()+360000000,"/");
  24.                   $avtorizirt = 1;
  25.                   SetCookie("login",$login_post,time()+36000000,"/");
  26.                   SetCookie("pass",$pass_post,time()+36000000,"/");
  27.                   header('Location:http://www.*.ru/settings_catalog.php');
  28.           exit();
  29.           }    
  30. }
  31. else
  32. {
  33.  header('Location:http://www.*.ru/no_avtorizirt.php?error=1');
  34.  exit();
  35. }
  36. ?>
  37.  


это проверки авторизованный пользователь или нет:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include("db.php");
  3. $avtorizirt = $_COOKIE['avtorizirt'];
  4. $login  = mysql_escape_string($_COOKIE['login']);
  5. $pass  = mysql_escape_string($_COOKIE['pass']);
  6. if ( $avtorizirt != 1)
  7. {
  8.         SetCookie("avtorizirt","0",time()+360000,"/");
  9.         $avtorizirt = 0;
  10. }
  11. else
  12. {
  13.   $zapros = mysql_query("SELECT * FROM user WHERE login='$login' AND pass ='$pass'",$db);
  14.   $user_array =  mysql_fetch_array($zapros);
  15.   if(mysql_num_rows($zapros) == 0)
  16.   {
  17.          SetCookie("avtorizirt","0",time()+360000,"/");
  18.          SetCookie("login","");
  19.          SetCookie("pass","");
  20.          $avtorizirt = 0;
  21.   }
  22.   else
  23.   {
  24.           SetCookie("avtorizirt","1",time()+360000000,"/");
  25.           $id_user = $user_array['id'];
  26.           $name_user = $user_array['login'];
  27.           $status_user = $user_array['status'];
  28.           $avtorizirt = 1;
  29.   }    
  30. }
  31. ?>


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

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. include("db.php");
  4. $avtorizirt = $_COOKIE['avtorizirt'];
  5. $login  = mysql_escape_string($_COOKIE['login']);
  6. $pass  = mysql_escape_string($_COOKIE['pass']);
  7. $key = $_COOKIE['key'];
  8. if ( $avtorizirt != 1)
  9. {
  10.         SetCookie("avtorizirt","0",time()+360000,"/");
  11.         $avtorizirt = 0;
  12.         header('Location:http://www.*.ru/no_avtorizirt.php');
  13.     exit();
  14. }
  15. else
  16. {
  17.   $zapros = mysql_query("SELECT * FROM user WHERE login='$login' AND pass ='$pass'",$db);
  18.   $user_array =  mysql_fetch_array($zapros);
  19.   if(mysql_num_rows($zapros) == 0)
  20.   {
  21.          SetCookie("avtorizirt","0",time()+360000,"/");
  22.          SetCookie("login","");
  23.          SetCookie("pass","");
  24.          $avtorizirt = 0;
  25.          header('Location:http://www.*.ru/no_avtorizirt.php');
  26.      exit();
  27.   }
  28.   else
  29.   {
  30.           SetCookie("avtorizirt","1",time()+360000000,"/");
  31.           $id_user = $user_array['id'];
  32.           $name_user = $user_array['login'];
  33.           $status_user = $user_array['status'];
  34.           $avtorizirt = 1;
  35.   }    
  36. }
  37. ?>
  38.  

Все ли я правильно сделал? (может и вообще не правильно Недовольство, огорчение )
Что то может надо было делать по другому?

(Отредактировано автором: 15 Сентября, 2010 - 21:39:13)

 
 Top
Uchkuma
Отправлено: 15 Сентября, 2010 - 21:42:14
Post Id



Участник


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


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




Жесть. Вы там что, все в печеньках храните? Используйте сессии.
 
 Top
binders
Отправлено: 15 Сентября, 2010 - 22:40:55
Post Id



Новичок


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


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




вот моя недавняя тема по этому вопросу
http://forum.php.su/topic.php?fo...1&topic=4804
 
 Top
magistr
Отправлено: 15 Сентября, 2010 - 22:50:14
Post Id



Частый гость


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


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




Uchkuma пишет:
Жесть. Вы там что, все в печеньках храните? Используйте сессии.
а чем печеньки плохо?
а так в основном как?
(Добавление)
особенно в плане безопасности как?
 
 Top
Uchkuma
Отправлено: 16 Сентября, 2010 - 09:42:20
Post Id



Участник


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


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




magistr пишет:
а чем печеньки плохо?
magistr пишет:
особенно в плане безопасности как?
Вот в плане безопасности и плохо.
Почитайте, пожалуйста про сессии http://www.php.su/articles/?cat=...amp;page=070#use .
 
 Top
magistr
Отправлено: 16 Сентября, 2010 - 14:23:01
Post Id



Частый гость


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


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




Ну а там и написано что для авторизации использовать печеньки! Так почему тут плохо с безопасностью?
 
 Top
Uchkuma
Отправлено: 16 Сентября, 2010 - 14:40:44
Post Id



Участник


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


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




magistr, в куках сохраняется только уникальный идентификатор, который необходим для работы сессий. Но никак не логин и пароль. Читайте внимательней.
 
 Top
magistr
Отправлено: 16 Сентября, 2010 - 15:18:26
Post Id



Частый гость


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


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




а можно пример или алгоритм? ( а желательно то и то Улыбка)

(Отредактировано автором: 16 Сентября, 2010 - 15:20:36)

 
 Top
Uchkuma
Отправлено: 16 Сентября, 2010 - 22:51:18
Post Id



Участник


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


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




magistr пишет:
а можно пример или алгоритм? ( а желательно то и то)
...
Что некто не знает?
Знают, просто коротко это об этом не рассказать, да еще и с примерами. Тем более в инетах есть статьи. Если у кого появится время, обязательно расскажут. Не поднимайте тему неинформативными сообщениями.
Вам сказали, что нужно использовать сессии, туда и копайте.
 
 Top
magistr
Отправлено: 19 Сентября, 2010 - 15:57:26
Post Id



Частый гость


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


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




я по читал статьи...и там дже есть примеры на аторизации на печеньках...
Но суть ошибки мне подсказали...в том что нельзя передавать пароль в них...
а лучше генировать ключ во время авторизации.
 
 Top
AdMeen
Отправлено: 19 Сентября, 2010 - 18:19:59
Post Id



Посетитель


Покинул форум
Сообщений всего: 370
Дата рег-ции: Сент. 2009  
Откуда: Воронеж


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




magistr пишет:
я по читал статьи...и там дже есть примеры на аторизации на печеньках...
Но суть ошибки мне подсказали...в том что нельзя передавать пароль в них...
а лучше генировать ключ во время авторизации.


Как бы сохраняя пароль в кукисах, вы даете возможность злоумышленнику выкрасть эти самые куки и простой их подменой авторизироваться на сайте
 
 Top
magistr
Отправлено: 19 Сентября, 2010 - 20:41:28
Post Id



Частый гость


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


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




А как будто индификатор сессия нельзя подменить?
И такой еще возник вопрос- как вы относитесь к дополнительной привязки к ip?

(Отредактировано автором: 19 Сентября, 2010 - 20:54:11)

 
 Top
Uchkuma
Отправлено: 19 Сентября, 2010 - 23:05:53
Post Id



Участник


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


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




magistr пишет:
А как будто индификатор сессия нельзя подменить?
Что значит подменить? Подобрать его практически невозможно. Можно выкрасть. Но это уже безопаснее, чем хранить в куках логин и пароль, т.к. идентификатор для каждой сессии назначается каждый раз разный, а логин и пароль - одни и те же. А для гарантированной защиты делается (вы правильно начали мыслить) дополнительная привязка к ip и юзер-агенту. Тогда с другого компьютера пользователь не сможет воспользоваться вашим идентификатором.

Сейчас вгляделся в ваш код. По сути, при каждом обращении к сайту, у вас пользователь авторизуется снова и снова, каждый раз отправляя в куках логин и пароль.
 
 Top
magistr
Отправлено: 20 Сентября, 2010 - 18:00:59
Post Id



Частый гость


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


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




Вот переделал...
Код проверки авторизации...
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. include("db.php");
  4. $avtorizirt = mysql_escape_string(trim($_COOKIE['avtorizirt']));
  5. $key_user = mysql_escape_string(trim($_COOKIE['key_user']));
  6. $ip = $_SERVER['REMOTE_ADDR'];
  7. $user_agent  = $_SERVER['HTTP_USER_AGENT'];
  8. $date = date("Y-m-d");
  9. if ( $avtorizirt != 1)
  10. {
  11.         SetCookie("avtorizirt","0",time()+360000,"/");
  12.         $avtorizirt = 0;
  13. }
  14. else
  15. {
  16.   $test_avtorizirt = mysql_query("SELECT * FROM authorization WHERE key_user='$key_user' AND ip='$ip' AND user_agent = '$user_agent' ",$db);
  17.   $test_avtorizirt_a =  mysql_fetch_array($test_avtorizirt);
  18.   if(mysql_num_rows($test_avtorizirt) == 0)
  19.   {
  20.          SetCookie("avtorizirt","0",time()+360000,"/");
  21.          SetCookie("login","");
  22.          SetCookie("pass","");
  23.          echo $avtorizirt = 0;
  24.   }
  25.   else
  26.   {
  27.           SetCookie("avtorizirt","1",time()+360000000,"/");
  28.           echo $id_user = $test_avtorizirt_a['id_user'];
  29.           echo $avtorizirt = 1;
  30.   }    
  31. }              
  32. ?>
  33.  


И сама авторизация...
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. include("db.php");
  4. $telefon_post =  mysql_escape_string(trim($_POST['telefon']));
  5. $pass_post =   mysql_escape_string(trim(md5($_POST['pass'])));
  6. $submit = $_POST['submit'];
  7. if (isset($telefon_post) AND  isset($pass_post))
  8. {
  9.    $authorization  = mysql_query("SELECT id FROM user WHERE telefon='$telefon_post' AND pass ='$pass_post'",$db);
  10.    $result_login = mysql_num_rows($authorization);
  11.          if($result_login == 0)
  12.           {
  13.                  SetCookie("avtorizirt","0",time()+360000,"/");
  14.                  SetCookie("login","");
  15.                  SetCookie("pass","");
  16.                  $avtorizirt = 0;
  17.                  header('Location:http://www.*.ru/no_avtorizirt.php?error=2'); // не верный логин или пароль
  18.                  exit();
  19.                  
  20.           }
  21.           else
  22.           { // логин и пароль верный авторизируем пользователя
  23.               $authorization = mysql_fetch_array($authorization);
  24.                   $id_user = $authorization['id'];
  25.               $authorization_result = mysql_query("SELECT * FROM authorization WHERE id_user='$id_user'",$db);
  26.                   if(mysql_num_rows($authorization_result) >= 1)
  27.                   {
  28.                            mysql_query("DELETE FROM authorization WHERE id_user='$id_user'",$db);
  29.                   }
  30.                   $ip = $_SERVER['REMOTE_ADDR'];
  31.                   $user_agent  = $_SERVER['HTTP_USER_AGENT'];
  32.                   $date = date("Y-m-d");
  33.                   do
  34.                   {
  35.                           $key_user = md5(rand(500000, 150000000000000).rand(10000, 15000000000).rand(1000000000, 150000000001000000).rand(10, 100000050)* 125412);
  36.                   }
  37.                   while(mysql_num_rows(mysql_query("SELECT * FROM authorization WHERE key_user='$key_user'",$db)) == 1 );
  38.                          
  39.                  
  40.                   if(mysql_query("INSERT INTO authorization (id_user,ip,user_agent,date,key_user) VALUES ('$id_user','$ip','$user_agent','$date','$key_user')",$db))
  41.                   {
  42.                           SetCookie("avtorizirt","1",time()+360000000,"/");
  43.                           SetCookie("key_user","$key_user",time()+360000000,"/");
  44.                           header('Location:http://www.*.ru/cabinet.php');
  45.                           exit();
  46.                   }
  47.                   else
  48.                   {
  49.                           header('Location:http://www..*.ru/error.php?page=login$error=mysql');
  50.                           exit();
  51.                   }
  52.           }    
  53. }
  54. else
  55. {
  56.  header('Location:http://www.*.ru/no_avtorizirt.php?error=1'); // заполнены не все поля
  57.  exit();
  58. }
  59.  
  60. ?>
  61.  


Ну как теперь ? какие пожелания?

(Отредактировано автором: 20 Сентября, 2010 - 18:01:57)

 
 Top
Uchkuma
Отправлено: 20 Сентября, 2010 - 18:41:29
Post Id



Участник


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


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




magistr, ну почему вы никак не хотите использовать встроенный в php механизм сессий?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB