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
Форумы портала PHP.SU :: Версия для печати :: Скрипт: Защита от перебора
Форумы портала PHP.SU » PHP » Пользовательские функции » Скрипт: Защита от перебора

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

1. valenok - 12 Апреля, 2007 - 09:54:49 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP session_start(); header("Content-Type: text/html; charset=cp1251");
  3.  
  4. function show_form($message){
  5.         ?>
  6.         <center>
  7. <font color='red'><?PHP echo $message ?> </font> <br/>
  8. <Form method="post"  name='form' id='form' action='login.php'>
  9. <B>Имя персонажа:</B>
  10. <input type='text' name='user' maxlength='20' />
  11.  
  12.  
  13. <B>Пароль:</B>
  14. <input type='password' name='pass' maxlength='20' />
  15. <input  type='submit' value="Вход" name='subm'/>
  16. </Form>
  17. </center>
  18. <?PHP
  19.         die();  }
  20.  
  21.  
  22. //Убеждаемся что пользователь жал на кнопку сабмит
  23. if(!isset($_POST['subm'])) show_from('');
  24.  
  25. // Убеждаемся что нам подсунули чтото а не кота в мешке
  26. if(!isset($_POST['user']) OR !isset($_POST['pass']) OR empty($_POST['user']) OR empty($_POST['pass']))
  27.         show_form("Не правильная пара логин-пароль.");
  28.  
  29. // подключение к БД
  30. $connection = mysql_connect("localhost","","") ;
  31. mysql_select_db('database') ;
  32.  
  33. // Проверяем, вводил ли польхователь неверный пароль несколько раз
  34. $errors = @mysql_result(mysql_query("SELECT count(ip) as falses FROM unauth WHERE
  35. logintime>DATE_SUB(NOW(),INTERVAL 1 HOUR) AND ip='".$_SERVER['REMOTE_ADDR']."'"),0);
  36.  
  37.  // НЕ смог достучаться до БД
  38.  if (mysql_error()) die();
  39.  
  40. // Если пользователь уже трижды пытался ввести пароль и все три не верно (защита от перебора компьютером)
  41. if ($errors>2)  die("Доступ закрыт попробуйте снова через час");
  42.  
  43.  
  44.  
  45. $user = mysql_escape_string($_POST['user']);
  46. $pass = md5($_POST['pass']."ahha");
  47.  
  48. // Проверяем есть ли пользователь с таким логином и паролем
  49. $result = mysql_query("SELECT `id` FROM `users` WHERE `login`='".$user."' AND `pass`='".$pass."'");
  50.        
  51.         // если есть - впускаем
  52.         if(mysql_num_rows($result)==1)
  53.                 $_SESSION['uid']=mysql_result($result,0);
  54.        
  55.         // Если нет - пишем так.
  56.         else
  57.                 show_form("Incorrect login-password.");
  58.        
  59.   // Далее сообщение которое увидит вошедший пользователь
  60. ?>
  61.  
  62. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" >
  63. <meta http-equiv="refresh" content="3; url=index.php" >
  64.  
  65. <table align=center bgcolor="#FFD987" width=500 valign=center>
  66. <tr><td align=center>Здравствуйте <?PHP echo mysql_escape_string($user); ?>,<br>
  67. ваш текущий ip адресс:  <?PHP print($_SERVER['REMOTE_ADDR']); ?><br>
  68. последняя авторизая : <?PHP print("системе не известна"); ?><br><BR>
  69. Сейчас выбудуте пермещены.<BR><a href='home.php' style="FONT-SIZE: 8pt; COLOR: #004400; FONT-FAMILY: verdana,geneva,arial cyr;text-decoration: none;">Нажмите сюда если браузер не перенаправляет вас автоматически</a>
  70. </td></tr>
  71. </table>
  72.  




***********************
Структура таблицы
**********************
В phpMyAdmin Тыкаем на нужную ДБ а потом там с верху - SQL
и копируем туда сей код

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. --
  4. -- Структура таблицы `unauth`
  5. --
  6.  
  7. CREATE TABLE `unauth` (
  8.   `username` varchar(20) NOT NULL default '',
  9.   `pass` varchar(20) NOT NULL default '',
  10.   `ip` varchar(15) default NULL,
  11.   `logintime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
  12. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
  13.  



Следует учесть один омент, что таблицу unauth придётся чистить вручную или вставить код очистки в код приведённый выше.

DELETE FROM `unauth` WHERE logintime<DATE_SUB(NOW(),INTERVAL 1 HOUR)







Также возможен ещё один вариант защиты от перебора.
До проверки формы вписать sleep(3); Таким образом скрипт будет бездействовать три секунды. Но этот способ, на мой взгляд, применим только при входе в админ панель, так как один человек и может подождать три секунды, так как зависание скрипта загружает сервер и так как для одного человека заводить целую таблицу бессмысленно.
2. LEONeso - 28 Ноября, 2010 - 12:57:34 - перейти к сообщению
Таблица unauth создается как хранилище данных о авторизации, а users как таблица с данными юзеров - надеюсь я верно понял. Но:

valenok пишет:

// Далее сообщение которое увидит вошедший пользователь

?>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" >
<meta http-equiv="refresh" content="3; url=index.php" >

<table align=center bgcolor="#FFD987" width=500 valign=center>
<tr><td align=center>Здравствуйте <?PHP echo mysql_escape_string($user); ?>,<br>
ваш текущий ip адресс: <?PHP print($_SERVER['REMOTE_ADDR']); ?><br>
последняя авторизая : <?PHP print("системе не известна"); ?><br><BR>
Сейчас выбудуте пермещены.<BR><a href='home.php' style="FONT-SIZE: 8pt; COLOR: #004400; FONT-FAMILY: verdana,geneva,arial cyr;text-decoration: none;">Нажмите сюда если браузер не перенаправляет вас автоматически</a>
</td></tr>
</table>


кажется, что данный текст и так увидит любой пользователь (без авторизации).
Верно? или в коде идет обрыв потока кода при неудачной авторизации ? (я не вижу)
3. ALEN - 03 Декабря, 2010 - 13:20:08 - перейти к сообщению
LEONeso
Смотрите внимательно , все в функции предусмотрено die(); можно exit();
4. LEONeso - 03 Декабря, 2010 - 16:04:09 - перейти к сообщению
ALEN пишет:
LEONeso
Смотрите внимательно , все в функции предусмотрено die(); можно exit();

Да заметил, когда полностью расковырял код. Жаль чт оу меня данный пример авторизации не сработал, решил бы тонну проблем.
5. ALEN - 03 Декабря, 2010 - 19:37:16 - перейти к сообщению
LEONeso
тут сама идея, перепишите под себя...

 

Powered by ExBB FM 1.0 RC1