Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.51 KB | None | 0 0
  1. <?php
  2. session_start();
  3. /*if(!isset($_SESSION["id_user"])) {
  4. header("location:login.php");
  5. }*/
  6.  
  7. function logged_in(){
  8. return (isset($_SESSION['id_user'])) ? true : false;
  9. }
  10. ?>
  11. <!doctype html>
  12. <html lang="en">
  13. <head>
  14. </head>
  15. <body>
  16. <div class="boton">
  17. <?php
  18. if (logged_in() === true){
  19. echo "Usuario logueado";
  20. }else{
  21. echo "usuario no logueao";
  22. }
  23. ?>
  24. </div>
  25. <div><a href="login.php">iniciar sesion</a></div>
  26. </body>
  27. </html>
  28.  
  29. <?php
  30. session_start();
  31. if (isset($_POST)) {
  32. $message= $username = $password = $usernameBD = $passwordDB = NULL;
  33. $captcha = true;
  34. //indicador usuario logueado
  35. $logueado = false;
  36. //Nro intentos permitidos para IP
  37. $attemptsIP = 8;
  38. //Nro intentos permitidos para Usuario
  39. $attemptsU = 5;
  40.  
  41. if(isset($_POST) && isset($_POST["vcode"]) && $_POST["vcode"]!=$_SESSION["vcode"]) {
  42. $captcha = false;
  43. $message = "Los caracteres escritos no coinciden con la palabra de verificación. Inténtalo de nuevo.";
  44. }else{
  45. unset($_SESSION['id_user']);
  46. }
  47.  
  48. $addres = $_SERVER['REMOTE_ADDR'];
  49.  
  50. //Conexión -> SQL
  51. require_once'app/php/config.ini.php';
  52. //Bloqueamos la ip por un día
  53. $stmtA = $con->prepare("SELECT attempts FROM failed_attempt WHERE ip=? AND datetime BETWEEN DATE_SUB( NOW() , INTERVAL 1 DAY ) AND NOW()");
  54.  
  55. $stmtA->bind_param("s",$addres);
  56. $stmtA->execute();
  57. $stmtA->store_result();
  58.  
  59. //Variable para saber si existe registro o no para insert o update.
  60. $check_result = $stmtA->num_rows;
  61. if ($stmtA->num_rows===1) {
  62. //if ($stmtA->num_rows>0) {
  63. //Obtenemos datos para comparar intentos y para resetear intentos por su ultimo fecha.
  64. $stmtA->bind_result($failed_login_attempt);
  65. $stmtA->fetch();
  66. $stmtA->close();
  67. } else {
  68. $stmtA->close();
  69. $failed_login_attempt=0;
  70. }
  71.  
  72. if(count($_POST)>0 && $captcha == true) {
  73. $username = $_POST["username"] ?: '';
  74. $password = $_POST["password"] ?: '';
  75.  
  76. //Buscar usuario ingresado - INICIO
  77. $stmtB = $con->prepare("SELECT id_user,username,password,logindatetime, CASE WHEN logindatetime BETWEEN DATE_SUB( NOW() , INTERVAL 2 MINUTE ) AND NOW() THEN '1' ELSE '0' END as logueado FROM users where username=? AND active=? LIMIT 1");
  78. $stmtB->bind_param("si",$username,$active);
  79. $active=1;
  80. $stmtB->execute();
  81. $stmtB->store_result();
  82. if ($stmtB->num_rows===1) {
  83. $stmtB->bind_result($id_userBD,$usernameBD,$passwordDB,$logindatetime,$activeBD);
  84. if ($stmtB->fetch()){
  85. if (password_verify($password, $passwordDB)) {
  86. $check_password = true;
  87. } else {
  88. $check_password = false;
  89. }
  90. } $stmtB->close();
  91. } else {
  92. $stmtB->close();
  93. $check_password = false;
  94. }
  95.  
  96. //Buscar usuario ingresado - FIN
  97.  
  98. //registra intentos de login segun IP - INICIO
  99. //if ($check_username == false) {
  100.  
  101. if($check_result===0){
  102.  
  103. //Si es su primer intento fallido, incluimos el primer registro en la BD
  104. $stmtC = $con->prepare("INSERT INTO failed_attempt (ip,attempts,datetime) VALUES (?, ?, NOW())");
  105. $stmtC->bind_param("si",$addres,$attempts);
  106.  
  107. $attempts = 1;
  108. //$datetime = date('Y-m-d H:i:s', time());
  109. $stmtC->execute();
  110. $stmtC->close();
  111.  
  112. } else {
  113. //se actualiza mientras el nro de intentos este abierto, para evitar bug con calculo del dia bloqueado
  114.  
  115. if($failed_login_attempt<$attemptsIP){
  116. $accountant = $failed_login_attempt + 1;
  117.  
  118. $stmtD = $con->prepare("UPDATE failed_attempt SET attempts=?, datetime=NOW() WHERE ip = ?");
  119. $stmtD->bind_param("is",$accountant,$addres);
  120.  
  121. //$datetime = date('Y-m-d H:i:s', time());
  122. $stmtD->execute();
  123. $stmtD->close();
  124. }
  125. }
  126. //}
  127. //registra intentos de login segun IP - FIN
  128.  
  129. //VALIDANDO DOBLE LOGUEO
  130.  
  131. if ($username==$usernameBD && $check_password == true && $logindatetime!=NULL && $activeBD==1) {
  132. $logueado = true;
  133. } else {
  134. //registra intentos segun usuario - INICIO
  135. $attempU = 0;
  136.  
  137. if($usernameBD!= null && $usernameBD!=''){
  138.  
  139. $id_user = $id_userBD;
  140.  
  141. //Sentencia
  142. $stmtE = $con->prepare("SELECT attempts FROM failed_login WHERE id_user =? AND datetime BETWEEN DATE_SUB( NOW() , INTERVAL 15 MINUTE ) AND NOW() ");
  143. $stmtE->bind_param("i",$id_user);
  144. $stmtE->execute();
  145. $stmtE->store_result();
  146. $queryResult = $stmtE->num_rows;
  147.  
  148. if ($queryResult===0) {
  149. $stmtF = $con->prepare("INSERT INTO failed_login (id_user, attempts, ip, datetime) VALUES (?, ?, ?, NOW())");
  150. $stmtF->bind_param("iis",$id_user,$attempts,$addres);
  151. $attempts=1;
  152. $stmtF->execute();
  153. $stmtF->close();
  154. } else {
  155. $stmtE->bind_result($attempU_BD);
  156. $stmtE->fetch();
  157.  
  158. $attempU = $attempU_BD+1;
  159.  
  160. if ($attempU_BD<$attemptsU) {
  161. $stmtG = $con->prepare("UPDATE failed_login SET attempts=?, ip = ?, datetime=NOW() where id_user =?");
  162. $stmtG->bind_param("isi",$attempU,$addres,$id_user);
  163. $stmtG->execute();
  164. $stmtG->close();
  165. }
  166.  
  167. } $stmtE->close();
  168. }
  169. //registra intentos segun usuario - FIN
  170. }
  171.  
  172. //validando Usuario y Contraseña - INICIO
  173.  
  174. if (empty($username) || empty($password)) {
  175. $message = "Es necesario introducir un nombre de usuario y contraseña";
  176. } elseif($failed_login_attempt>=$attemptsIP){
  177. $message = "'IP' bloqueada por 1 dia";
  178. } elseif($logueado){
  179. $message = "'Usuario' ya se encuentra logueado.";
  180. } elseif($attempU>=$attemptsU){
  181. $message = "'Usuario' bloqueado por 15 minutos";
  182. } elseif ($username != $usernameBD ) {
  183. $message = "El 'Usuario' que has introducido no coincide. ";
  184. } elseif ($check_password == false) {
  185. $message = "Tu 'Contraseña' introducido no coincide. ";
  186. } else {
  187. $_SESSION["id_user"] = $id_userBD;
  188. //$con->query("DELETE FROM failed_attempt WHERE ip = '$addres'");
  189. //$con->query("DELETE FROM failed_login WHERE id_user ='$id_user'");
  190. }
  191. //validando Usuario y Contraseña - FIN
  192. if(isset($_SESSION["id_user"])) {
  193. //echo '<script>window.location="index.php"</script>';
  194. header('location:index.php');exit;
  195. }
  196.  
  197. }
  198. }
  199. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement