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

 PHP.SU

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


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

> Без описания
DNGX
Отправлено: 15 Марта, 2012 - 18:55:29
Post Id


Новичок


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


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




Здравствуйте! Написал скрипт авторизации пользователей, скажите пожалуйста нет ли уязвимостей в коде? Безопасный ли сам способ авторизации? Если нет, как его могут взломать?

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. session_name('user_id');
  3. include 'head.php';
  4. $data = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE `login` = '".$login."';"));
  5.  
  6.  
  7. if (empty($login)){
  8. echo 'Вы не ввели логин!<br/>';
  9. include 'foot.php';
  10. }
  11.  
  12.  
  13. if (empty($pass)){
  14. echo 'Вы не ввели пароль!<br/>';
  15. include 'foot.php';
  16. }
  17.  
  18.  
  19. if($pass == $data['pass'])
  20.  
  21. {
  22.  $_SESSION['user_id'] = $data['id'];
  23. echo 'Ура! Вы авторизированы!';
  24.  
  25. }
  26.  
  27. else
  28.  
  29. {
  30.  
  31. echo 'Введены не верные данные!<br/>';
  32.  
  33. }
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40. //Кто авторизован, а кто нет?
  41. if (isset($_SESSION['user_id'])) {
  42.     echo 'Личный кабинет!';
  43. }
  44. else {
  45.     die('<form action="login.php" method="post">
  46.    <table>
  47.        <tr>
  48.            <td>Логин:</td>
  49.            <td><input type="text" name="login" /></td>
  50.        </tr>
  51.        <tr>
  52.            <td>Пароль:</td>
  53.            <td><input type="password" name="pass" /></td>
  54.        </tr>
  55.        <tr>
  56.            <td></td>
  57.            <td><input type="submit" value="Войти" /></td>
  58.        </tr>
  59.    </table>
  60. </form>');
  61. }
  62. ?>

(Отредактировано автором: 15 Марта, 2012 - 18:56:47)

 
 Top
Okula
Отправлено: 15 Марта, 2012 - 19:00:23
Post Id



Участник


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


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




DNGX, небезопасный. К тому же скрипт выведет ошибки Undefined
 
 Top
dzubchik
Отправлено: 15 Марта, 2012 - 20:21:53
Post Id



Гость


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


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




DNGX,пароль нужно хотя бы хешировать. Используйте md5 или sha. Ну для более надёжной защиты, ко всему этому можна добавлять соль.
 
 Top
DNGX
Отправлено: 17 Марта, 2012 - 06:31:23
Post Id


Новичок


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


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




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. session_name('user_id');
  4.  
  5.  
  6. include 'head.php';
  7.  
  8.  
  9. $pass=md5($_POST['pass']);
  10.  
  11. $data = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE `login` = '".$login."';"));
  12.  
  13.  
  14. if (empty($login)){
  15.  
  16. echo 'Вы не ввели логин!<br/>';
  17.  
  18. include 'foot.php';
  19.  
  20.  
  21. }
  22.  
  23.  
  24. if (empty($pass)){
  25.  
  26. echo 'Вы не ввели пароль!<br/>';
  27.  
  28. include 'foot.php';
  29.  
  30.  
  31. }
  32.  
  33.  
  34. if($pass == $data['pass'])
  35.  
  36. {
  37.  
  38.  $_SESSION['user_id'] = $data['id'];
  39.  
  40. echo 'Ура! Вы авторизированы!';
  41.  
  42. }
  43.  
  44. else
  45.  
  46. {
  47.  
  48. echo 'Введены не верные данные!<br/>';
  49.  
  50.  
  51. }
  52.  
  53.  
  54. //Кто авторизован, а кто нет?
  55.  
  56. if (isset($_SESSION['user_id'])) {
  57.  
  58.     echo 'Личный кабинет!';
  59.  
  60. }
  61.  
  62. else {
  63.  
  64. die('<form action="login.php" method="post">
  65.  
  66. <table>
  67.  
  68. <tr>
  69.  
  70. <td>Логин:</td>
  71.  
  72. <td><input type="text" name="login" /></td>
  73.  
  74. </tr>
  75.  
  76. <tr>
  77.  
  78. <td>Пароль:</td>
  79.  
  80. <td><input type="password" name="pass" /></td>
  81.  
  82. </tr>
  83.  
  84. <tr>
  85.  
  86. <td></td>
  87.  
  88. <td><input type="submit" value="Войти" /></td>
  89.  
  90. </tr>
  91.  
  92. </table>
  93.  
  94. </form>');
  95.  
  96. }
  97.  
  98. ?>
  99.  
  100.  
  101.  
  102. Регистрация пользователя:
  103. $login=mysql_real_escape_string(htmlspecialchars(trim($_POST['login'])));
  104. $pass=md5($_POST['pass']);
  105. mysql_query("INSERT INTO `users` SET `login`='$login', `pass`='$pass' ;") or die(mysql_error());
  106.  
  107. echo 'Поздравляем! Вы успешно зарегистрированы.<br/>
  108. Ваш логин: <b>'.$login.'</b><br/>
  109. Ваш пароль: <b>'.$pass.'</b><br/>
  110. Для надежности, Ваши данные высланы Вам на E-mail.<br/>';



Okula, о какой ошибке вы говорите?
У меня вроде все нормально работает..
Правильно ли я сделал защиту?
Нужно ли фильтровать md5?
Возможно ли как-то сделать чтобы когда выводится текст об успешной регистрации, в строке "Ваш пароль:" выводился пароль в нормальном виде, а не в md5?
Заранее спасибо за ответы.

(Отредактировано автором: 17 Марта, 2012 - 06:36:21)

 
 Top
DNGX
Отправлено: 17 Марта, 2012 - 10:03:32
Post Id


Новичок


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


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




И еще такой вопрос,
session_name('user_id'); и session_start(); должны на всех страницах быть прописаны?
 
 Top
PATCH
Отправлено: 22 Марта, 2012 - 16:55:15
Post Id



Частый посетитель


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


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




везде где у вас должен лазить авторизованный пользователь
1) должна запускатся сессия session_start();
2) проверятся условие авторизован ли пользователь (обычно проверка существование сессии)
 
 Top
Hidalgo
Отправлено: 22 Марта, 2012 - 17:09:42
Post Id



Частый гость


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


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




PHP:
скопировать код в буфер обмена
  1. if (empty($login)){
  2. echo 'Вы не ввели логин!<br/>';
  3. include 'foot.php';
  4. }
  5.  
  6.  
  7. if (empty($pass)){
  8. echo 'Вы не ввели пароль!<br/>';
  9. include 'foot.php';
  10. }


Зачем куча таких проверок, если все делается проще?

CODE (html):
скопировать код в буфер обмена
  1. <input required name="login" value="" type="text">

required тут ключевое слово

(Отредактировано автором: 22 Марта, 2012 - 17:10:29)

 
 Top
DelphinPRO
Отправлено: 22 Марта, 2012 - 17:55:34
Post Id



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


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


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




Hidalgo пишет:
Зачем куча таких проверок, если все делается проще?
CODE (html):
<input required name="login" value="" type="text">
required тут ключевое слово

Клиентских проверок недостаточно. Все данные обязательно нужно проверять на сервере.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Мелкий Супермодератор
Отправлено: 22 Марта, 2012 - 18:17:23
Post Id



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


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


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




Hidalgo пишет:
Зачем куча таких проверок, если все делается проще?

Затем, что в идеале проверок должно быть значительно больше:
0) полный список валидации на сервере
1) желательно как можно более полная валидация на клиенте
2) если п.2 сделан средствами html5 - ещё и дублирующая валидация на JS для браузеров, не умеющих html5.


-----
PostgreSQL DBA
 
 Top
Hidalgo
Отправлено: 22 Марта, 2012 - 18:44:56
Post Id



Частый гость


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


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




DelphinPRO пишет:
Клиентских проверок недостаточно. Все данные обязательно нужно проверять на сервере.

Так никто и не спорит что данные нужно проверять на сервере. Конечно приводить к определенному типу, или с помощью регулярок на валидность введенных данных обязательно нужно.
Просто какой смысл проверять на пхп ввел пользователь логин или нет, если это можно сделать на html, а на пхп просто проверить длину и наличие запрещенных символов
(Добавление)
хотя был неправ: ослик игнорирует данный параметр. Беру свои слова обратно.

(Отредактировано автором: 22 Марта, 2012 - 18:46:04)

 
 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