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


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

> Без описания
spok
Отправлено: 10 Ноября, 2010 - 13:04:07
Post Id


Новичок


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


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




Здравствуйте!

Хотелось-бы у профессионалов спросит, все ли в коде авторизаций правильно, или есть что нужно поправить?
Желательно с примерами.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         extract($_POST);
  3.         unset($login,$pwrd,$id);
  4.         session_start();
  5.         session_register("login","pwrd","id");
  6.  
  7.         if($logout==1){
  8.         session_destroy();
  9.         header("Location: index.php");
  10.         }
  11.  
  12.         include "config.php";
  13.         include "config_inc.php";
  14.         include "error_inc.php";
  15.  
  16.         function auth($log,$pass){
  17.                 global $t_user;
  18.                 $query = "select id from ".$t_user." where email=\"".$log."\" and pass=\"".$pass."\" ";
  19.                 $result = MYSQL_QUERY($query);
  20.  
  21.                         if(mysql_num_rows($result)>0){
  22.                         $id=mysql_result($result,0,"id");
  23.                         @mysql_free_result($result);
  24.                         return $id;
  25.                         }else{
  26.                         @mysql_free_result($result);
  27.                         return 0;
  28.                         }
  29.         }
  30.  
  31.  
  32.         if(auth($_SESSION['login'],$_SESSION['pwrd'])!=0){
  33.         header("Location: user_menu.php");      // Авторизация не было так как была действующая ссесия
  34.         }
  35.  
  36.         if($_SERVER['REQUEST_METHOD']=="POST"){
  37.                 if(isset($lo)){
  38.                 $log=htmlspecialchars($log);
  39.                 $passwrd=htmlspecialchars($passwrd);
  40.                 $au=auth($log,$passwrd);
  41.                         if($au>0){
  42.                         $login=$log;
  43.                         $pwrd=$passwrd;
  44.                         $id=$au;
  45.                         header("Location: user_menu.php"); // Аторизация прошла удачно
  46.                         }else{
  47.                         require('header.php');
  48.                         print "Авторизация не прошла";  // Авторизация прошла не удачно
  49.                         require('foter.php');
  50.                         exit;
  51.                         }
  52.                 }
  53.         }else{
  54.         require('header.php');
  55.         }
  56. ?>
  57. // Дальше код ввода данных пользователя для авторизаций
 
 Top
OrmaJever Модератор
Отправлено: 10 Ноября, 2010 - 13:25:26
Post Id



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


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


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




Ну мягкоговоря код не очень, но если работает можите пользоватся. только исправьте строку
PHP:
скопировать код в буфер обмена
  1. $query = "select id from ".$t_user." where email=\"".mysql_escape_string($log)."\" and pass=\"".mysql_escape_string($pass)."\" ";

без неё это прямая дорога к sql иньекции.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
spok
Отправлено: 10 Ноября, 2010 - 13:37:59
Post Id


Новичок


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


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




OrmaJever

Спасибо за ответ исправил.
Сам код то работает, просто интересуют узкие места данного кода, такие как вы описали.
Может еще что ни так в коде?
Да и интересует мнение почему код "мягкоговоря не очень", почему?
 
 Top
OrmaJever Модератор
Отправлено: 10 Ноября, 2010 - 15:31:11
Post Id



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


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


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




Ну я не буду перечислять ошибки вашего кода но приведу примерный пример моего
PHP:
скопировать код в буфер обмена
  1. function login($login, $pass)
  2. {
  3.     $mysql = mysql_connect(BD_HOST, BD_USER, PASS);
  4.     mysql_select_db(DATABASE, $mysql);
  5.  
  6.     $login = mysql_escape_string(trim($login));
  7.     $pass = trim($pass);
  8.     $lp = mysql_query("SELECT * FROM users WHERE login='".$login."'");
  9.     $ob = mysql_fetch_object($lp);
  10.  
  11.     if(!isset($login) or !isset($pass))
  12.     {
  13.         return '<span class="err">Заполните поля</span>';
  14.     }
  15.     elseif(!$lp)
  16.     {
  17.         return '<span class="err">Логин или пароль не верны</span>';
  18.     }
  19.     elseif($ob->pass == $pass)
  20.     {
  21.         session_start();
  22.         $cookie = generate_cookie(10, true); //генерирует случайную  строку из 10 символов
  23.         $mysql->query("UPDATE users SET hash='".$cookie."' WHERE login='".$login."'");
  24.         setcookie('user', $cookie, time()+9999999, '/');
  25.         header('Location:'.$_SERVER['PHP_SELF']);
  26.     }
  27.     else
  28.     {
  29.         return '<span class="err">Логин или пароль не верны!</span>';
  30.     }
  31.     return false;
  32. }


вот так я вижу авторизацию


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
spok
Отправлено: 12 Ноября, 2010 - 22:59:55
Post Id


Новичок


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


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




OrmaJever
Спасибо за пример

Возник еще один вопрос
Например пользователь хотел добавить новость на такой то странице и так как он не вошел на сайт то его перебросило на страницу авторизаций как сделать что-бы после авторизаций его переносло на туже страницу добавления новости и конечно может быть страница добавления с параметрами типа add.php?id=100

Какой переменой можно при первом посещений страницы авторизаций ее вынуть ( то есть вынуть add.php?id=100 )?
 
 Top
Мелкий Супермодератор
Отправлено: 12 Ноября, 2010 - 23:12:03
Post Id



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


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


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




$_SERVER['REQUEST_URI']


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB