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]   

> Описание: Очень нужны Ваши замечания
OverNik
Отправлено: 29 Октября, 2009 - 15:25:43
Post Id



Частый гость


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


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




Скрипт авторизации

index.php (Отобразить)

filtr.php (Отобразить)

mysql.php (Отобразить)


в файле mysql.php проверок на подключения пока нету, поставлю позже, так же нету проверок или файл вызивается с index.php, прошу по этим вопросам замечания не писать.
Скрипт работает так:
Если человек авторизирован, при генерации страници будет проверятся его куки с логином и паролем, если же не совпадают то переменая $enter = 0, если совпадают то $enter =1
Дальше уже так:
PHP:
скопировать код в буфер обмена
  1. if($enter==1)
  2. {
  3.  echo "текст для зарегестрированого пользивателя";
  4. }
  5. else if($enter==0)
  6. {
  7.  echo "текст для не зарегестрированого пользивателя";
  8. }

Дамп базы думаю не нужен так как там всего три столбца, id | user | psw

Спасибо!
 
 Top
Sajaxt
Отправлено: 30 Октября, 2009 - 11:48:55
Post Id


Новичок


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


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




Я конечно программист не опытный и начинающий, но кажется что зря Вы функцию filtr() писали. Есть такая функция mysql_real_escape_string(), она как раз занимается экранированием спецсимволов и т.д.

И надеюсь никто не обидится, я тоже хотел кинуть на обсуждение скрипт авторизации Улыбка но тему уже открыли, поэтому выложу сюда свой скрипт:

dbaccsess.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //*********Datenbankanschluss**************//
  4. //------Vipolnenije Zaprosa-----------------
  5. function DBconnect(){
  6.         $con_id = @mysql_connect("localhost","root","") or die("Не могу соедениться с сервером");
  7.         @mysql_select_db("probe",$con_id) or die("Не могу соедениться с БД");
  8.         return $con_id;
  9. }
  10.  
  11. function DBresult($query,$flag){
  12.     $dbresult = mysql_query($query);
  13.  
  14.     if($flag==1){
  15.         return mysql_fetch_array($dbresult);
  16.     }else{
  17.         return $dbresult;
  18.     }
  19. }
  20.  
  21. function DBdisconnect($con_id){
  22.     @mysql_close($con_id) or die("соеденение с сервером не было завершино");
  23. }
  24. ?>
  25.  


authorization.php
PHP:
скопировать код в буфер обмена
  1.  
  2. /*таблица пользователей
  3. CREATE TABLE `probe`.`user` (
  4. `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  5. `email` VARCHAR( 60 ) NOT NULL ,
  6. `pswrd` VARCHAR( 80 ) NOT NULL ,
  7. `hash` VARCHAR( 100 ) NOT NULL ,
  8. `ip` VARCHAR( 20 ) NOT NULL ,
  9. `log_time` INT( 30 ) NOT NULL
  10. ) ENGINE = MYISAM ;
  11. */
  12. <?PHP
  13.         session_start();
  14.         include("../scriptparts/dbaccess.php");
  15.         $con_id=DBconnect();
  16.        
  17.         if(isset($_POST['no_hash'])){//Проверяем перешелли пользователь на страницу с формы
  18.                 if($_POST['email']=='undefined' or $_POST['email']=="") die("Вы не заполнели поле электроной почты!");
  19.         if($_POST['pswrd']=='undefined' or $_POST['pswrd']=="") die("Вы не ввели пароль!");
  20.        
  21.         $email = mysql_real_escape_string($_POST['email']);
  22.        
  23.         $pot_user=DBresult("SELECT id,pswrd FROM user WHERE email='$email' LIMIT 1",1);
  24.        
  25.         if(!$pot_user){
  26.                 die("Вы не зарегестрированы в системе!");
  27.         }elseif(md5($_POST['pswrd'])!=$pot_user['pswrd']){
  28.                 die("Вы ввели не верный пароль!");             
  29.         }else{
  30.                 $hash=md5(uniqid());
  31.                 $ip=$_SERVER["REMOTE_ADDR"];
  32.                 log_time=time();       
  33.        
  34.                 $_SESSION['hash']=$hash;
  35.                 $_SESSION['log_time']=$log_time;
  36.        
  37.                 DBresult("UPDATE user SET hash='$hash',ip='$ip',log_time='$log_time' WHERE email='$email'",0);
  38.         }
  39.         }elseif(isset($_SESSION['hash'])){// Былли пользователь уже авторизирован
  40.                 $ip=$_SERVER["REMOTE_ADDR"];
  41.                 $pot_user=DBresult("SELECT hash,log_time FROM user WHERE ip='$ip' LIMIT 1",1);
  42.                
  43.                 if(!$pot_user){
  44.                         die("Вы не авторизированы!");
  45.                 }elseif((time()-3600)>$pot_user['log_time']){
  46.                         die("Время сессии истекло!");
  47.                 }elseif($_SESSION['hash']!=$pot_user['hash']){
  48.                         die("Вы не авторизированы!");
  49.                 }else{
  50.                         DBresult("UPDATE user SET log_time='".time()."' WHERE ip='$ip' LIMIT 1",0);
  51.                 }
  52.         }else{
  53.                 DBdisconnect($con_id);
  54.                 die("Вы не авторизированы");
  55.         }
  56.        
  57.         DBdisconnect($con_id);
  58. ?>
  59.  


Работает всё так, в начале каждого скрипта вставляется authorazation.php если во время исполнения срипта авторизации ошибок нет, то код доходит до непосредственого исполнения скрипта страницы.
Принцип работы: Сначала смотрим, перешелли пользователь на страницу с формы, если да то сравниваем адрес эл. почты и пассворт, и заносим в базу ip пользователя, время авторизации и уникальный хэш, также записываем эти данные в переменный сессии. При последующем вызове скрипта, проверяем естьли переменные сессии и сверяем их, в скрипте всё прокомментировано.

Пожалуйста кто поопытней, проверьте скрипт на вшивость, дайте пару советов. Просто хочется написать авторизацию и просто использовать её в дальнейшем.

Зарание примного благодарен!
 
 Top
OverNik
Отправлено: 30 Октября, 2009 - 15:37:22
Post Id



Частый гость


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


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




в будущем функция фильтр очень пригодится, от инъекций и XSS
 
 Top
lolo
Отправлено: 30 Октября, 2009 - 16:34:21
Post Id


Новичок


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


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




OverNik, извините, но уже с самого начала код не гуд.

PHP:
скопировать код в буфер обмена
  1. //проверка куков
  2. $enter = 0;
  3. if(isset($_COOKIE['user']) or isset($_COOKIE['psw']) or $enter ==1) // Такс, проверяете, установлено ли в куку 'user' ИЛИ 'psw' - то есть вам все равно, что из этого установлено? И зачем проверка $enter ==1, если вы строкой выше установили эту переменную равной нулю?
  4. {
  5.     //Фильтрация логина
  6.     $login = $_COOKIE['login']; // А установлено ли в куку 'login' вам, судя по условию выше, наплевать? ;)
  7.     filtr($login, 0);
  8.     $login = $filtr; // не разбиралась в вашем "фильтре", пока ничего по его поводу не скажу, кроме того, что не правильнее было бы сделать, чтобы функция возвращала значение, а не объявляла какую-то переменную $filtr глобальной? Тогда бы выражение выглядело бы проще:  $login = filtr($login, 0);
  9. //фильтрация пароля
  10.     $psw = $_COOKIE['psw'];
  11.     filtr($psw, 0);
  12.     $psw = $filtr;  // Три строчки можно записать в одну: $psw = filtr($_COOKIE['psw'], 0);
  13.  


Дальше не хватило моих слабых сил разбираться, да и времени в конце рабочего дня в пятницу - тоже Радость

(Отредактировано автором: 30 Октября, 2009 - 17:01:57)

 
 Top
OverNik
Отправлено: 30 Октября, 2009 - 19:07:07
Post Id



Частый гость


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


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




Спасибо, сегодне же исправлю.

не совсем понял с функцией filtr, можна пожалуйста подробней

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

 
 Top
lolo
Отправлено: 03 Ноября, 2009 - 10:54:48
Post Id


Новичок


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


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




OverNik пишет:
не совсем понял с функцией filtr, можна пожалуйста подробней

Во-первых, убрать global $filtr из функции. Во-вторых, почитать про функции побольше Улыбка
Правильнее сделать, чтобы функция возвращала некий результат, который получается после обработки получаемых значений, а не устанавливала какие-то глобальные переменные.
PHP:
скопировать код в буфер обмена
  1. function filtr($text,$prob = 1)
  2. {
  3.     // здесь обработка $text, $prob
  4.     return preg_replace($pattern, "", $text); // возвращение результата, значение которого примет переменная, если написать напрмер: $var = filtr($x, $y);
  5. }


Глобальные переменные вообще желательно избегать, дабы исключить возможность создания трудновыявлеямых багов (особенно в больших проектах).

А вообще ваша функция filtr искажает данные, тупо выкидывая все нужное и ненужное, например, если у меня логин окажется o'nill, то она будет искать onill или alloy, а будет искать oy. Но это же неверно. Так что правильнее будет просто экранировать спецсимволы функциями addslashes() или mysql_real_escape_string(). И незачем изобретать велосипед, тем более кривой.
 
 Top
Sajaxt
Отправлено: 04 Ноября, 2009 - 23:49:15
Post Id


Новичок


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


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




Люди добрые а по поводу моего скрипта, ктонить чтонить скажет? Улыбка
 
 Top
JROUD
Отправлено: 05 Ноября, 2009 - 10:03:56
Post Id


Гость


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


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




Sajaxt, большого смысла в функциях DBconnect, DBresult не вижу, но в функции DBdisconnect его вообще нет. Зачем создавать функцию которая передаёт получиное значение другой функции? Да, и я не уверен, но разве не нужно в php указывать void если функция ничего не возвращает?
 
 Top
Мелкий Супермодератор
Отправлено: 05 Ноября, 2009 - 15:13:55
Post Id



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


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


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




JROUD пишет:
Да, и я не уверен, но разве не нужно в php указывать void если функция ничего не возвращает?

Нет, не надо. Это вы C/C++ перечитали Улыбка

JROUD пишет:
большого смысла в функциях DBconnect, DBresult не вижу

А если подумать? Это общение с СУБД.

JROUD пишет:
но в функции DBdisconnect его вообще нет

Просто правило хорошего тона, сказать СУБД, что это соединение завершено.


-----
PostgreSQL DBA
 
 Top
Champion Супермодератор
Отправлено: 05 Ноября, 2009 - 15:26:30
Post Id



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


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


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




Мелкий пишет:
А если подумать? Это общение с СУБД.
JROUD прав.
Мелкий пишет:
Просто правило хорошего тона, сказать СУБД, что это соединение завершено.
И тут тоже.
Вопрос в том, зачем оформлять это в отдельную функцию?
 
 Top
JROUD
Отправлено: 05 Ноября, 2009 - 15:36:03
Post Id


Гость


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


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




Мелкий пишет:
JROUD пишет:
но в функции DBdisconnect его вообще нет

Просто правило хорошего тона, сказать СУБД, что это соединение завершено.

Я не против того что нужно закрыть соединение с СУБД, я говорю о том что задача функции DBdisconnect вызвать функцию mysql_close, а зачем если можно вызвать сразу mysql_close?
 
 Top
Sajaxt
Отправлено: 05 Ноября, 2009 - 15:47:02
Post Id


Новичок


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


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




Хорошо спасибо, буду испровлять.

А что на счет authorization.php?
 
 Top
Sajaxt
Отправлено: 14 Ноября, 2009 - 13:49:56
Post Id


Новичок


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


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




Что, никто совсем ничего не скажет?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB