PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: краштэст)
Hunter
Отправлено: 10 Января, 2010 - 09:05:29
Post Id



Частый гость


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


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




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

форма для входа в систему в файле index.php,
данные для подключения к серверу БД в файле db_data_acceess.php
обработчик данных (то бишь сама авторизация) enter.php,
пользовательские функции используемые в обработчике в файле enter)function.php,
результат авторизации - страница формируемая файлом - chat.php
запрос на создание БД со всеми таблицами прилагаю в файле запрос.txt )))

index.php :
PHP:
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. <title>
  4. HunterChat
  5. </title>
  6. </head>
  7. <body>
  8.     <form action="enter.php" name="user_enter" method="post" enctype="multipart/form-data">
  9.     <?PHP
  10.     if (isset($_GET['action'])) {
  11.     switch($_GET['action']) {
  12.     case 'a':
  13.         echo 'недопустимый ник!' . '<br>';
  14.         break;
  15.     case 'b':
  16.         echo 'недопустимый пароль!' . '<br>';
  17.         break;
  18.     case 'c':
  19.         echo 'неверный пароль!' . '<br>';
  20.         break;
  21.     case 'd':
  22.         echo 'этот ник уже в чате!' . '<br>';
  23.         break;
  24.     case 'e':
  25.         echo 'вход невозможен из за проблем с сервером БД. Обратитесь к администрации.<br>';
  26.         break;
  27.     }
  28.     }
  29.     if (! $_GET['action']) {
  30.         echo 'Введите ник и пароль. Для входа без регистрации пароль вводить необязательно.' . '<br>';
  31.     }
  32. ?>
  33. <input type="text" name="user_login" size="10" maxlength="30" value="Новый Юзер">
  34. <input type="password" name="user_pass" size="10" maxlength="15" value="123456">
  35. <input type="submit" size="8" value="Войти">
  36. </form>
  37. <br>
  38. <a href="registration.php">регистрация</a>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp <a href="restore_passwd.php">забыли пароль?</a>
  39. </body>
  40. </html>



enter.php :
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.     if (session_id() == '') session_start();
  3.     include ('./db_data_access.php');
  4.     include ('./enter_function.php');
  5.     @$dblink = mysql_connect($serv, $user, $pass);
  6.     if ($dblink) {
  7.     }
  8.     else {
  9.         $error_string = mysql_error();
  10. //      ТУТ НЕОБХОДИМО РЕАЛИЗОВАТЬ ЗАПИСЬ ОШИБКИ В ЛОГ        
  11.         $action = 'e';
  12.         header("location: ./index.php?action=$action");
  13.         exit;
  14.     }
  15.     @$selected = mysql_select_db($base, $dblink);
  16.     if ($selected) {
  17.     }
  18.     else {
  19.         $error_string = mysql_error();
  20. //      ТУТ НЕOБХОДИМО РЕАЛИЗОВАТЬ ЗАПИСЬ ОШИБКИ В ЛОГ
  21.         $action = 'e';
  22.         header("location: ./index.php?action=$action");
  23.         exit();
  24.     }
  25.     $sql = "SELECT * FROM chat_setting";
  26.     @$qry = mysql_query($sql, $dblink);
  27.     if ($qry) {
  28.         $setting = mysql_fetch_assoc($qry);
  29.         mysql_free_result($qry);
  30.     }
  31.     else {
  32.         $error_string = mysql_error();
  33. //      ТУТ НЕOБХОДИМО РЕАЛИЗОВАТЬ ЗАПИСЬ ОШИБКИ В ЛОГ
  34.         $action = 'e';
  35.         header("location: ./index.php?action=$action");
  36.         exit();
  37.     }
  38.     if ((strlen($_POST['user_login'])) > ($setting['login_length'])){
  39.         $action = 'a';
  40.         header("location: ./index.php" . "?action=" . "$action");
  41.         exit();
  42.     }
  43.     if (is_inadmissible($_POST['user_login']) === false) {
  44.         $action = 'a';
  45.         header("location: ./index.php" . "?action=" . "$action");
  46.         exit();
  47.         }
  48.     if ((strlen($_POST['user_pass'])) > ($setting['password_length'])) {
  49.         $action = 'b';
  50.         header("location: ./index.php" . "?action=" . "$action");
  51.         exit();
  52.     }
  53.     if (is_inadmissible($_POST['user_pass']) === false) {
  54.         $action = 'b';
  55.         header("location: ./index.php" . "?action=" . "$action");
  56.         exit();
  57.     }
  58.     $login = safe_line($_POST['user_login']);
  59.     $sql = "SELECT * FROM users WHERE user_login = '$login'";
  60.     @$qry = mysql_query($sql, $dblink);
  61.     if ($qry) {
  62.         $user = mysql_fetch_assoc($qry);
  63.         mysql_free_result($qry);
  64.     }
  65.     else {
  66.         $error_string = mysql_error();
  67. //      ТУТ НЕOБХОДИМО РЕАЛИЗОВАТЬ ЗАПИСЬ ОШИБКИ В ЛОГ
  68.         $action = 'e';
  69.         header("location: ./index.php?action=$action");
  70.         exit();
  71.     }
  72.     if (! $user['user_login']) {
  73.         $sql = "SELECT * FROM in_chat WHERE nick = '$login'";
  74.         @$qry = mysql_query($sql, $dblink);
  75.         $in_chat = mysql_fetch_assoc($qry);
  76.         mysql_free_result($qry);
  77.         if ($in_chat['nick'] !== $_POST['user_login']) {
  78.             $_SESSION['nick'] = $login;
  79.             $_SESSION['profile'] = 'default';
  80.             header("location: ./chat.php");
  81.             exit();
  82.         }
  83.         if ($in_chat['nick'] == $_POST['user_login']) {
  84.             $action = 'd';
  85.             header("location: ./index.php" . "?action=" . "$action");
  86.             exit();
  87.         }
  88.     }
  89.     else {
  90.         if ($user['user_password'] == $_POST['user_pass']) {
  91.             $_SESSION['nick'] = $login;
  92.             $_SESSION['profile'] = $user['user_rank'];
  93.             header("location: ./chat.php");
  94.             exit();
  95.         }
  96.         else {
  97.             $action = 'c';
  98.             header("location: ./index.php" . "?action=" . "$action");
  99.             exit();                                                  
  100.         }
  101.     }
  102. ?>


db_data_acceess.php:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $serv = 'localhost';
  3. $user = 'chat_base';
  4. $base = 'chat_base';
  5. $pass = '333123';
  6. ?>


enter_function.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include ('./db_data_access.php');
  3.  
  4. /*************************************************************************
  5. * is_inadmissible() - функция проверки на недопустимые символы           *
  6. *************************************************************************/
  7. function is_inadmissible($string){
  8.     $badchar = array('/','~','!','`','"','$','%','&','?','^',';',':','.');  //массив недопустимых символов
  9.     foreach ($badchar as $key=>$value) {
  10.         if (stripos($string, $value) === false) {
  11.             return true;
  12.         }
  13.         else {
  14.             return false;
  15.             break(1);
  16.         }
  17.     }
  18. }
  19. /*************************************************************************
  20. * safe_line - подготовка вносимых в базу данных в безопасный вид         *
  21. *************************************************************************/
  22. function safe_line($line) {
  23.     if (get_magic_quotes_gpc()) {
  24.             $line = stripslashes($line);
  25.         }
  26.         if (! is_numeric($line)) {
  27.             $line = mysql_real_escape_string($line);
  28.         }
  29.         return $line;
  30. }
  31. ?>


все файлы прилагаю в архиве))
Скачать файл: files.rar
Скачан раз: 322

(Отредактировано автором: 11 Января, 2010 - 17:19:38)

 
 Top
EuGen Администратор
Отправлено: 11 Января, 2010 - 11:01:26
Post Id


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


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


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




Не используйте "магические кавычки",
в остальном http://php.net/security


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Champion Супермодератор
Отправлено: 11 Января, 2010 - 11:07:48
Post Id



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


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


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




Hunter пишет:
enter.php :
Осталось добавить комментарии типа /* Открывается фигурная скобка от if */, /* Закрывается фигурная скобка от if */ ...
 
 Top
EuGen Администратор
Отправлено: 11 Января, 2010 - 11:11:20
Post Id


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


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


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




Комментарии должны сообщать не что мы делаем, а зачем. Ну и, хороший код комментирует себя сам.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Hunter
Отправлено: 11 Января, 2010 - 17:04:25
Post Id



Частый гость


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


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




EuGen, Champion все посмеялись?)))) да знаю я, просто код писался для одного человека в качестве примера, а коменты я просто забыл убрать...
(Добавление)
EuGen пишет:
Ну и, хороший код комментирует себя сам.

ну что верно то верно..., но если скажем код занимает строк 300 то трудно представить его без коментариев Подмигивание
 
 Top
EuGen Администратор
Отправлено: 11 Января, 2010 - 17:28:32
Post Id


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


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


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




Мне не было смешно, если честно. То, что я указал - мое личное мнение.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Hunter
Отправлено: 11 Января, 2010 - 17:44:39
Post Id



Частый гость


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


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




EuGen пишет:
в остальном http://php.net/security

с английским у меня туговато...Ну магические кавычки я сейчас уберу.. а что с остальным? Инъекция вроде не должна пройти, да и к базе я обращаюсь только с логином, если такой логин есть то помещаю необходимые данные о нем в массиве и проверка пароля происходит уже "вне базы"...
 
 Top
MegaMax
Отправлено: 07 Мая, 2010 - 19:56:14
Post Id


Новичок


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


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




Долго мучаюсь над своим проектом. хотел бы воспользоваться кодом данной авторизации. Возможно ли получить код всех страниц?
 
 Top
smok
Отправлено: 01 Октября, 2010 - 17:45:00
Post Id


Новичок


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


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




При беглом просмотре выявил:
PHP:
скопировать код в буфер обмена
  1.  
  2. function is_inadmissible($string){
  3.     $badchar = array('/','~','!','`','"','$','%','&','?','^',';',':','.');  //массив недопустимых символов
  4.     foreach ($badchar as $key=>$value) {
  5.         if (stripos($string, $value) === false) {
  6.             return true;
  7.         }
  8.         else {
  9.             return false;
  10.             break(1);
  11.         }
  12.     }
  13. }
  14.  


функция проверяет только первый символ, т.к. в обоих ветках if'a присутствует return. break после return не будет работать, т.к. функция вернула значение фолс и закончила свою работу.

(Отредактировано автором: 01 Октября, 2010 - 17:47:03)

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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB