Mam poniższy kod logowania do panelu strony. Proszę o sprawdzenie poprawności pod kątem ewentualnych błędów. W pliku index.php mam input typu email więc dorobiłem blokowanie adresu IP w sesji jeżeli ktoś w przeglądarce zmieni typ inputa np. na name. Początkowo dałem
  1. $_SESSION['blockIP']= "unset"
żeby kod nie rzucał błędów, ale nie jestem pewny czy jest do dobre rozwiązanie. Proszę o jakieś sugestie w którym kierunku iść, co jest potrzebne a co nie.


  1. <?php
  2. if ((!isset($_POST['email'])) || (!isset($_POST['pass'])))
  3. {
  4. header('Location: index.php');
  5. exit();
  6. }
  7.  
  8. try
  9. {
  10. require_once "connect.php";
  11. $connect = @new mysqli($host, $db_user, $db_password, $db_name);
  12.  
  13. if ($connect->connect_errno!=0)
  14. {
  15. header('Location: index.php');
  16. exit();
  17. }
  18. else
  19. {
  20. $sekret = "*****************************************";
  21. $check = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$sekret.'&response='.$_POST['g-recaptcha-response']);
  22. $replay = json_decode($check);
  23.  
  24. if ($replay->success==false)
  25. {
  26. $_SESSION['error'] = '<div class="error">Potwierdź, że nie jesteś robotem!</div>';
  27. header('Location: index.php');
  28. exit();
  29. }
  30. else
  31. {
  32. $email = $_POST['email'];
  33. if (filter_var($email, FILTER_VALIDATE_EMAIL))
  34. {
  35. $result = $connect->prepare("SELECT * FROM persons WHERE email=?");
  36. $result -> bind_param('s', $email);
  37.  
  38. $result->execute();
  39. $result_bind = $result->get_result();
  40. $row = $result_bind->fetch_assoc();
  41.  
  42. if(!isset($_SESSION['blockIP']))
  43. {
  44. $_SESSION['blockIP']= "unset";
  45. }
  46.  
  47. if(($result_bind->num_rows == 1) && (password_verify($_POST['pass'],$row['pass'])) && (strpos($_SERVER['REMOTE_ADDR'],$_SESSION['blockIP']) !== 0))
  48. {
  49. $_SESSION['logged'] = true;
  50. $_SESSION['id'] = $row['id'];
  51. $_SESSION['email'] = $row['email'];
  52.  
  53. unset($_SESSION['blockIP']);
  54. unset($_SESSION['error']);
  55. $result->free_result();
  56.  
  57.  
  58. if ($connect->query("INSERT INTO `sessions` (`id`,`email`,`date`,`ip`,`status`) VALUES (NULL, '$email', Now(), '{$_SERVER['REMOTE_ADDR']}', 'logged')"))
  59. {
  60.  
  61. header('Location: panel.php');
  62. exit();
  63.  
  64. }
  65.  
  66. }
  67. else
  68. {
  69. $connect->query("INSERT INTO `sessions` (`id`,`email`,`date`,`ip`,`status`) VALUES (NULL, '$email', Now(), '{$_SERVER['REMOTE_ADDR']}', 'failed')");
  70. $_SESSION['error'] = '<div class="error">Błędny login lub hasło!</div>';
  71. header('Location: index.php');
  72. exit();
  73. }
  74. }
  75. else
  76. {
  77. $_SESSION['error'] = '<div class="error">Podaj poprawny adres e-mail!</div>';
  78. $_SESSION['blockIP'] = $_SERVER['REMOTE_ADDR'];
  79. header('Location: index.php');
  80. exit();
  81. }
  82. }
  83. $connect->close();
  84. }
  85. }
  86. catch(Exception $e)
  87. {
  88. echo '<div class="alert"><div class="alert-danger">'.$e.'</div></div>';
  89. }
  90. ?>