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]   

> Без описания
-=1100=-
Отправлено: 29 Сентября, 2009 - 20:49:04
Post Id



Частый гость


Покинул форум
Сообщений всего: 156
Дата рег-ции: Май 2007  
Откуда: Город Святого Петра


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

[+]


Авторизация

PHP:
скопировать код в буфер обмена
  1.  
  2. // Если поля  формы авторизации  пустые то EXIT!
  3. if(empty($_POST['loginuser']) && empty($_POST['passuser']) ){
  4.   echo("Error!");
  5.   exit();}
  6. // Если НЕ пустые, то....
  7.  
  8. //Преобразует  символы
  9. $logi=htmlspecialchars($_POST['loginuser']);
  10. $logi=trim($logi);  // убираем пробелы
  11. $logi=strtolower($logi); // делаем строку нижнего регистра
  12.  
  13. //Преобразует  символы
  14. $pass=htmlspecialchars($_POST['passuser']);
  15. $pass=trim($pass); // убираем пробелы
  16.  
  17. include "inc/bd.php"; // Подкл. БД
  18. include "inc/generator.php"; //  генерируем строку из 50 символов
  19.  
  20. // узнаем, нет ли такого логина в БД
  21.   $access=mysql_query("SELECT * FROM `dostup` WHERE `login` LIKE '$logi' ");
  22.   $access=mysql_fetch_array($access);
  23.  
  24.          //$access[2] -  Пороль из БД
  25.         //$access[1] - Логин из БД
  26. // если пороль и логин TRUE то идем дальше
  27.   if($access[2]===md5(md5($pass)) && $access[1]===$logi){
  28.    
  29.   // Разбиваем 50 -ти символьную строку напополам (по 25)
  30.     $gen1=substr($gener,0,25);
  31.      $gen2=substr($gener,25);
  32.    
  33.    // записываем целую 50-ти строку в сессию
  34.       $_SESSION['keysession']=$gener;
  35.    
  36.    // пишем обе части длинной строки в БД
  37.      mysql_query("INSERT INTO sessions VALUES('$gen1','$gen2'')");
  38.  
  39.   // адресуем юзера ...  
  40.      echo("<script type='text/javascript'>window.location.href='users/'</script>");
  41.         }
  42.   else{
  43.      echo("Ошибка ввода Логина или Пароля");}
  44.  
  45.   }
  46.  


файл access.php который includ`им на каждую страницу

PHP:
скопировать код в буфер обмена
  1.  
  2.    // Если сессия пустая то шлем на авторизацию
  3. if(empty($_SESSION['keysession']) ){
  4.     echo("<script type='text/javascript'>window.location.href='http://авторизация'</script>");
  5.    exit();}
  6.  
  7.  //Вытаскиваем наше 50-ти символьное число в переменную
  8.    $ses=$_SESSION['keysession'];
  9.      
  10.   // Разбиваем ее напополам
  11.    $ses1=substr($ses,0,25);
  12.    $ses2=substr($ses,25);  
  13.    
  14.    include "bd.php"; // полкл. БД
  15.  
  16.  // Ищем в БД первый  кусок 50-ти символьной строки  строки
  17.    $keyses=mysql_query("SELECT * FROM  sessions WHERE `ID` LIKE '$ses1'");
  18.    $keyses=mysql_fetch_array($keyses);
  19.    
  20.    if(!empty($keyses[0])){ // Если нашли ...
  21.     //Вытаскиваем оба куска из БД и сравниваем их с сессией
  22.     // Если они не равны, то переадресация к авторизации
  23.       if($keyses[0].$keyses[1]!=$_SESSION['keysession']) {
  24.          echo("<script type='text/javascript'>window.location.href='http://авторизация'</script>");
  25.          exit();}}
  26.    else{ // Если в БД пусто то переадрисация
  27.       echo("<script type='text/javascript'>window.location.href='http://авторизация'</script>");
  28.       exit();}
  29.    
  30.  



Если хватило терпения посмотреть код полностью, напишите ваше мнение "+" и "-"

Какие будут предложения.
Что можно дополнить, что убрать ....?

(Отредактировано автором: 29 Сентября, 2009 - 20:50:50)



-----
INSPIRON |6400
 
 Top
Maksim337
Отправлено: 29 Сентября, 2009 - 21:21:01
Post Id


Частый гость


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


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




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if(empty($_POST['loginuser']) && empty($_POST['passuser']) ){
  3.   exit('Error!');}
  4. ?>

Улыбка мелочь а приятноУлыбка
(Добавление)
Кстати а как насчет проверки символов?Если я рус букв введу?
 
 Top
-=1100=-
Отправлено: 29 Сентября, 2009 - 21:30:08
Post Id



Частый гость


Покинул форум
Сообщений всего: 156
Дата рег-ции: Май 2007  
Откуда: Город Святого Петра


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

[+]


Maksim337 пишет:
Кстати а как насчет проверки символов?Если я рус букв введу


Об этом я не подумал. Ну вообще можно на JavaScript сделать. При вводе.

А вообще из соображения безопасности как?


-----
INSPIRON |6400
 
 Top
Nikola
Отправлено: 30 Сентября, 2009 - 09:17:11
Post Id



Новичок


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


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




Можно еще проверять количество не удавшихся авторизаций и в случаи 3(?) попыток, перенаправлять пользователя на другую страницу, либо делать задержку в несколько секунд. Это усложнит брутфорс акаунтов.

(Отредактировано автором: 30 Сентября, 2009 - 09:19:30)

 
 Top
Phantik
Отправлено: 30 Сентября, 2009 - 10:23:07
Post Id


Посетитель


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


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




Возникло несколько вопросов\предложений...

1) Почему в SQL запросах вместо = ставишь LIKE?

2) Зачем пароль хэшировать 2 раза?

3) Не совсем понял с какой целью необходимо хранить в базе gen1 и gen2? А в каждой странице выбирать их из базы, складывать и сверять с сессионной переменной? Это должно спасти в случае кражи кукисов? Или для чего это нужно?

4) Параметры передаваемые в SQL запрос вроде как необходимо экранировать
mysql_real_escape_string.

5) Вроде бы красивее было переадресацию делать заголовками.
header("Location: somepage.php");
Или у JS-а асть каккие-то преимущества?
 
 Top
JustUserR
Отправлено: 30 Сентября, 2009 - 18:13:27
Post Id



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


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


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




Phantik пишет:
Или у JS-а асть каккие-то преимущества?
Есть преимущества особенно когда архитектура PHP-скрипта неправильная и он уже выводит до заголовков какуюлибо информацию


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



Частый гость


Покинул форум
Сообщений всего: 156
Дата рег-ции: Май 2007  
Откуда: Город Святого Петра


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

[+]


Phantik пишет:
2) Зачем пароль хэшировать 2 раза?

Это параноидальное ))

Phantik пишет:
Почему в SQL запросах вместо = ставишь LIKE?

Мне казалась что LIKE это для VARCHAR, а = для INT Не понял и опечален

Phantik пишет:
Не совсем понял с какой целью необходимо хранить в базе gen1 и gen2? А в каждой странице выбирать их из базы, складывать и сверять с сессионной переменной? Это должно спасти в случае кражи кукисов? Или для чего это нужно?

Ну это для пущей безопасности.

А если использовать ip то еще " + " в безопасности.

PHP:
скопировать код в буфер обмена
  1.  
  2. include "inc/generator.php"; // строка из 50 символов
  3. include "inc/gen.php"; // строка из 5 символов
  4. $ipusera=getenv("REMOTE_ADDR").$hvost;  // ip юзера + 5 символьная строка
  5.  
  6.   $access=mysql_query("SELECT * FROM .`dostup` WHERE `login`='$logi'");
  7.   $access=mysql_fetch_array($access);
  8.  
  9.   if($access[2]===md5(md5($passs)) && $access[1]===$logi){
  10.      $gen1=substr($gener,0,25); // разбиваем на 25
  11.      $gen2=substr($gener,25);  // разбиваем на 25
  12.          
  13.      $gen2=strrev($gen2);   // переворачиваем 2-ую часть "длинной" строку
  14.            
  15.      $_SESSION['keysession']=$gen2; // записываем вторую часть длинной строки в сессию  
  16.      $_SESSION['hvost']=$hvost;  // 5 символьный "хвостик" тоже в сессию
  17.     // записываем в БД
  18.    // первый кусок от длинной строки
  19.   // саму 50-ти символьную строку
  20.      mysql_query("INSERT INTO sessions VALUES('$gen1','$gener','$ipusera')");
  21.  


и на каждой странице include`м

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  $exit="<script type='text/javascript'>window.location.href='http://отсылаем'</script>";
  4.    \\ берем ip usera + "хвост".
  5.     $ipusera=getenv("REMOTE_ADDR").$_SESSION['hvost'];
  6.     $ses2=$_SESSION['keysession'];
  7.  
  8.     include "bd.php";
  9.     \\ Ищем в БД ip usera + 5 символьный "хвост"
  10.     $keyses=mysql_query("SELECT * FROM  sessions WHERE `ipusera` LIKE '$ipusera'");
  11.     $keyses=mysql_fetch_array($keyses);
  12.          
  13.     if(!empty($keyses[0])){
  14.           // Если нашел то переворачиваем строку $ses2 в исходное положение
  15.                 $ses2=strrev($ses2);
  16.           // берем первый кусок кусок ( 25 сим.) + второй кусок (25 сим) и сравниваем с 50 символами
  17.         if($keyses[0].$ses2!=$keyses[1]) {
  18.  
  19.            exit($exit);}}
  20.     else{
  21.       exit($exit);}
  22.  
  23.  


Если ip другой то ошибка, + "хвостик" делает его уникальным.


-----
INSPIRON |6400
 
 Top
Phantik
Отправлено: 30 Сентября, 2009 - 21:18:02
Post Id


Посетитель


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


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




Я считаю, что запись в базу всевозможных случайных строк, или IP адресов, не дает никаких преимуществ. Хотя я конечно могу и ошибаться.
Но я долго пытался понять от чего такие навароты могут защитить. Нашел только один гипотетический вариант, когда у тебя крадут куки, перетаскивают их каким-то образом к себе на компьютер(а в браузерах кроме IE это довольно - таки не тривиальная задача) и, до истечения срока сессии(а это что-то около 20 минут по дефолтовым настройкам) и уже со своего браузера с твоими кукисами заходят на твой аккаунт. Вот в этом случае запись IP в базу может препятствовать входу.
Зато такой метод увеличивает загрузку базы. Это ведь каждый раз, для каждого пользователя, при каждом переходе на секретную страницу выполняется дополнительный запрос к базе

(Отредактировано автором: 30 Сентября, 2009 - 21:24:42)

 
 Top
EuGen Администратор
Отправлено: 30 Сентября, 2009 - 21:54:01
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Phantik пишет:
а в браузерах кроме IE это довольно - таки не тривиальная задача

ну так подавляющее большинство и используют его. Причем еще дырявое 6-е.
Phantik пишет:
и, до истечения срока сессии

Ну так 20 минут - вечность для такой операции.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
-=1100=-
Отправлено: 01 Октября, 2009 - 07:25:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 156
Дата рег-ции: Май 2007  
Откуда: Город Святого Петра


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

[+]


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

Тут я полностью согласен.

Просто так более безопаснее. мне так кажется


-----
INSPIRON |6400
 
 Top
EuGen Администратор
Отправлено: 01 Октября, 2009 - 14:00:15
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




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

При правильной организации не загрузит. Все зависит от целей.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 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