Advertisement
BedOmar

Untitled

Jul 17th, 2016
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.27 KB | None | 0 0
  1. <?php
  2. session_start();// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
  3.          
  4. if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
  5. if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
  6. //заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
  7.  
  8. if (empty($login) or empty($password)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
  9. {
  10. exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!"); //останавливаем выполнение сценариев
  11. }
  12. //если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
  13. $login = stripslashes($login);
  14. $login = htmlspecialchars($login);
  15.  
  16. $password = stripslashes($password);
  17. $password = htmlspecialchars($password);
  18.  
  19. //удаляем лишние пробелы
  20. $login = trim($login);
  21. $password = trim($password);
  22.  
  23.  
  24. // дописываем новое********************************************
  25.  
  26. // подключаемся к базе
  27. include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
  28.  
  29. // минипроверка на подбор паролей
  30. $ip=getenv("HTTP_X_FORWARDED_FOR");
  31. if (empty($ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }
  32.  
  33. mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//удаляем ip-адреса ошибавшихся при входе пользователей через 15 минут.
  34.  
  35. $result = mysql_query("SELECT col FROM oshibka WHERE ip='$ip'",$db);// извлекаем из базы колличество неудачных попыток входа за последние 15 минут у пользователя с данным ip
  36. $myrow = mysql_fetch_array($result);
  37.  
  38. if ($myrow['col'] > 2) {
  39. exit ("Вы набрали логин или пароль неверно 3 раза. Подождите 15 минут до следующей попытки."); //останавливаем выполнение сценариев
  40.  
  41.  
  42. }
  43.  
  44. $password = md5($password);//шифруем пароль
  45. $password = strrev($password);// для надежности добавим реверс
  46. $password = $password."b3p6f";
  47. //можно добавить несколько своих символов по вкусу, например, вписав "b3p6f". Если этот пароль будут взламывать методом подбора у себя на сервере этой же md5,то явно ничего хорошего не выйдет. Но советую ставить другие символы, можно в начале строки или в середине.
  48.  
  49. //При этом необходимо увеличить длину поля password в базе. Зашифрованный пароль может получится гораздо большего размера.
  50.  
  51.  
  52. $result = mysql_query("SELECT * FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db); //извлекаем из базы все данные о пользователе с введенным логином
  53. //мы дописали «AND activation='1'», то есть пользователь будет искаться только среди активированных. Желательно добавить это условие к другим подобным проверкам данных пользователя
  54. $myrow = mysql_fetch_array($result);
  55. if (empty($myrow['id']))
  56. {
  57. //если пользователя с введенным логином и паролем не существует,то записываем ip пользователя и с датой ошибки
  58.  
  59. $select = mysql_query ("SELECT ip FROM oshibka WHERE ip='$ip'");
  60. $tmp = mysql_fetch_row ($select);
  61. if ($ip == $tmp[0]) {
  62. //проверяем, есть ли пользователь в таблице "oshibka"
  63. $result52 = mysql_query("SELECT col FROM oshibka WHERE ip='$ip'",$db);
  64. $myrow52 = mysql_fetch_array($result52);
  65.  
  66. $col = $myrow52[0] + 1;//Если есть,то приплюсовываем количесво
  67. mysql_query ("UPDATE oshibka SET col=$col,date=NOW() WHERE ip='$ip'");
  68. }
  69.  
  70. else {
  71. //если за последние 15 минут ошибок не было, то вставляем новую запись в таблицу "oshibka"
  72. mysql_query ("INSERT INTO oshibka (ip,date,col) VALUES ('$ip',NOW(),'1')");
  73. }
  74.  
  75. exit ("Извините, введённый вами логин или пароль неверный."); //останавливаем выполнение сценариев
  76.  
  77. }
  78. else {
  79.  
  80.           //если пароли совпадают, то запускаем пользователю сессию! Можете его поздравить, он вошел!
  81.           $_SESSION['password']=$myrow['password'];
  82.           $_SESSION['login']=$myrow['login'];
  83.           $_SESSION['id']=$myrow['id'];//эти данные очень часто используются, вот их и будет "носить с собой" вошедший пользователь
  84.          
  85. //Далее мы запоминаем данные в куки, для последующего входа.
  86. //ВНИМАНИЕ!!! ДЕЛАЙТЕ ЭТО НА ВАШЕ УСМОТРЕНИЕ, ТАК КАК ДАННЫЕ ХРАНЯТСЯ В КУКАХ БЕЗ ШИФРОВКИ
  87.  
  88. if (isset($_POST['save'])){
  89. //Если пользователь хочет, чтобы его данные сохранились для последующего входа, то сохраняем в куках его браузера
  90. setcookie("login", $_POST["login"], time()+9999999);
  91. setcookie("password", $_POST["password"], time()+9999999);
  92. setcookie("id", $myrow['id'], time()+9999999);
  93. }
  94.  
  95. if (isset($_POST['autovhod'])){
  96. //Если пользователь хочет входить на сайт автоматически
  97. setcookie("auto", "yes", time()+9999999);
  98. setcookie("login", $_POST["login"], time()+9999999);
  99. setcookie("password", $_POST["password"], time()+9999999);
  100. setcookie("id", $myrow['id'], time()+9999999);}
  101. }  
  102.  
  103. echo "<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>";
  104.  
  105. //перенаправляем пользователя на главную страничку, там ему и сообщим об удачном входе
  106.  
  107. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement