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]   

> Описание: Насколько они безопасны?
Libiros
Отправлено: 31 Августа, 2010 - 11:04:00
Post Id


Новичок


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


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




Написал 2 скрипта (регистрация и авторизация). Работают идеально, но, как написано в книге
Цитата:
Лучше защитить свой код, потому что он виден "невооруженным" взглядом

В чём вообще состоит защита и как её лучше обеспечить?

register.php
PHP:
скопировать код в буфер обмена
  1. <?
  2. echo "Регистрация нового пользователя:<br><br><br>";
  3.  
  4. echo "<form action=register.php method=post>
  5. Логин: &nbsp&nbsp<input type=text name=login><br><br>
  6. Пароль: <input type=password name=pass><br><br>
  7. E-mail: &nbsp&nbsp<input type=text name=email><br><br>
  8. <input type=submit name=go value=отправить>
  9. </form>";
  10.  
  11. if (isset($go)) {
  12. if ($login=="") echo "<font color='red'>Вы не ввели логин</font><br>";
  13. if ($pass=="") echo "<font color='red'>Вы не ввели пароль</font><br>";
  14. if ($email=="") echo "<font color='red'>Вы не ввели e-mail</font><br>";
  15. else echo "Вы зарегистрированы!";
  16.  
  17. $db=mysql_connect("localhost","root","");
  18. mysql_select_db("testuser",$db);
  19.  
  20. $pswd=md5($pass);
  21. $result_reg_login=mysql_query("insert into ur (login,pass,email) values ('$login','$pswd','$email')",$db);
  22.  
  23. }
  24.  
  25. ?>

auth.php
PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3. session_name("auth");
  4. session_register("user_name");
  5.  
  6. if(isset($go)) {
  7.  
  8. $db=mysql_connect("localhost","root","");
  9. mysql_select_db("testuser",$db);
  10. $res=mysql_query("select * from ur");
  11. $log=0;
  12. while ($row=mysql_fetch_row($res))
  13. {
  14. if ($row[1]==$login)
  15.  {
  16.   if($row[2]===md5($pass))
  17.    { $user_name=$login;
  18.    $log=1;
  19.     break;
  20.    }
  21.  }
  22. }
  23.  
  24. if ($log==0) { echo "Неправильный логин или пароль!";}
  25.  
  26. echo "Здравствуйте, <b>$user_name</b>&nbsp&nbsp&nbsp&nbsp&nbsp<a href='auth.php'>Главная</a><br>";
  27. }
  28.  
  29. //else {
  30.  
  31. echo "Аутентификация пользователя:<br><br><br>";
  32.  
  33. echo "<form action=auth.php method=post>
  34. Логин: &nbsp&nbsp<input type=text name=login><br><br>
  35. Пароль: <input type=password name=pass><br><br>
  36. <input type=submit name=go value=отправить>
  37. </form>";
  38.  
  39. echo "<br>$user_name &nbsp&nbsp&nbsp&nbsp&nbsp <a href='auth.php?uns'>выход</a>";
  40. if ($user_name=="admin") { echo "<br> hello, admin"; }
  41. if (isset($uns)) { session_unregister("user_name"); Header("Location: auth.php"); }
  42. //}
  43.  
  44. ?>
 
 Top
inecs
Отправлено: 31 Августа, 2010 - 11:30:04
Post Id


Новичок


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


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




Если защита, то может имеют ввиду обфускацию кода.
По другому, я бы еще добавил квотирование небезопасных элементов. addslashes,stripslashes,mysql_real_escape_string

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.     // Функция экранирования переменных
  3.     public function Slashes($value)
  4.         {
  5.     // если magic_quotes_gpc включена - используем stripslashes
  6.     if (get_magic_quotes_gpc()) {
  7.         $value = stripslashes($value);
  8.     }
  9.     // Если переменная - число, то экранировать её не нужно
  10.     // если нет - то окружем её кавычками, и экранируем
  11.     if (!is_numeric($value)) {
  12.         $value = mysql_real_escape_string($value);
  13.     }
  14.     return $value;
  15.         }
 
 Top
Мелкий Супермодератор
Отправлено: 31 Августа, 2010 - 11:37:32
Post Id



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


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


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




Ну ошибок безопасности много:
0) код этот работает только с костылями. Ему необходим включенный register_globals, который с версии 5.3 всегда отключён, т.е. работать не будет. Обращайтесь к пришедшим переменным через массивы $_POST, $_GET, $_COOKIE
1) в 21 строке первого скрипта в базу предаёте чистым текстом данные - пройдёт SQL Injection. Перед записью данный в базу обработайте их с помощью mysql_real_escape_string
2) в том же скрипте вместо email можно послать любой непустой бред, но для стадии обучения - можно пропустить проверку, т.к. в безопасном варианте она бывает весьма хитрой
3) auth.php - выбирать всю таблицу и потом скриптом по ней пробегать - не лучшее решение. К тому же, на каждой итерации пересчитывать md5 пароля...
Хорошим вариантом будет передать и логин и пароль сразу условиями запроса:
PHP:
скопировать код в буфер обмена
  1. select * from ur where pass=".md5($_POST['pass'])." and login=".mysql_real_escape_string($_POST['login'])

и проверить через mysql_num_rows>0 есть ли такой пользователь.
4) в базе из под рута работать - плохой тон, не для того рут предназначен.


-----
PostgreSQL DBA
 
 Top
Libiros
Отправлено: 31 Августа, 2010 - 11:42:05
Post Id


Новичок


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


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




Спасибо! Учту.
 
 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