Lenguaje PHP

Mostrar Captcha 3 intentos fallidos de login PHP

Mostrar Captcha 3 intentos fallidos de login PHP. ¿Qué es una CAPTCHA en la WEB?
Se trata de una prueba pregunta-respuesta utilizada en computación para determinar cuándo el usuario que se registra o intenta acceder a la web y/o aplicación web es o no humano.

Esto sirve para evitar spam en tu sistema web o evitar ataques de hackeo de fuerza bruta, ya sea un sistema de comentarios, registro de usuario, un foro de discusión o un blog.

Un CAPTCHA sirve para evitar que robots creados por personas, bots o máquinas envíen información a través de los formularios que tenemos en una web, provocando spam o ataques DOS.

Mostrar Captcha 3 intentos fallidos de login PHP

Un ejemplo de formulario con CAPTCHA

Pero en este caso vamos a incorporar un CAPTCHA cuando el inicio de sesión se falle por 3 veces, es decir si no logra acceder en 3 intentos aparecerá el CAPTCHA.

  1. Primero Crear dos tablas en la base de datos

Tabla de Usuarios (users.sql)

Tabla de login fallidos (failed_login.sql)

Crear el archivo del login (index.php)

<html>
<head>
<title>User Login</title>
<link rel="stylesheet" type="text/css" href="styles.css" />
</head>
<body>
<form name="frmUser" method="post" action="">
<div class="message"><?php if($message!="") { echo $message; } ?></div>
<table border="0" cellpadding="10" cellspacing="1" width="500" align="center">
<tr class="tableheader">
<td align="center" colspan="2">Iniciar Sesion</td>
</tr>
<tr class="tablerow">
<td colspan="2">Username</td>
</tr>
<tr class="tablerow">
  <td colspan="2"><input type="text" name="user_name"></td>
</tr>
<tr class="tablerow">
<td colspan="2">Password</td>
</tr>
<tr class="tablerow">
  <td colspan="2"><input type="password" name="password"></td>
</tr>
<?php if (isset($failed_login_attempt) && $failed_login_attempt >= 3) { ?>
<tr class="tablerow">
<td width="54"><img src="captcha_code.php" /></td>
<td width="403"><input name="captcha_code" type="text"></td>
</tr>
<?php } ?>
<tr class="tableheader">
<td align="center" colspan="2"><input type="submit" name="submit" value="Enviar registro"></td>
</tr>
</table>
</form>
</body>
</html>
  • Código PHP para calcular la cuenta de inicio de sesión fallida  de nuestro sistema.

Este código se utiliza para calcular el número de intentos de inicio (3 intentos) de sesión no válidos basados ​​en la dirección IP.

<?php
$mysqli = new mysqli('localhost','root','','base_de_datos');	
$ip = $_SERVER['REMOTE_ADDR'];
$result = $mysqli->query("SELECT count(ip_address) AS failed_login_attempt FROM failed_login WHERE ip_address = '$ip'  AND date BETWEEN DATE_SUB( NOW() , INTERVAL 1 DAY ) AND NOW()");
$row  = $result->fetch_assoc();
$failed_login_attempt = $row['failed_login_attempt'];
$result->free();
?>
  • Insertar entradas de accesos no válidas

Este código valida las credenciales del usuario y si las credenciales no son válidas, se agregará a la base de datos una entrada con dirección_ip.

<?php
session_start();
$message="";
$captcha = true;
if(count($_POST)>0 && isset($_POST["captcha_code"]) && $_POST["captcha_code"]!=$_SESSION["captcha_code"]) {
$captcha = false;
$message = "Introduzca el código de Captcha correcto";
}
$mysqli = new mysqli('localhost','root','root','base');	
$ip = $_SERVER['REMOTE_ADDR'];
$result = $mysqli->query("SELECT count(ip_address) AS failed_login_attempt FROM failed_login WHERE ip_address = '$ip'  AND date BETWEEN DATE_SUB( NOW() , INTERVAL 1 DAY ) AND NOW()");
$row  = $result->fetch_assoc();
$failed_login_attempt = $row['failed_login_attempt'];
$result->free();


if(count($_POST)>0 && $captcha == true) {
	$result = $mysqli->query("SELECT * FROM users WHERE user_name='" . $_POST["user_name"] . "' and password = '". $_POST["password"]."'");
	$row  = $result->fetch_assoc();
	$result->free();
	if(is_array($row)) {
		$_SESSION["user_id"] = $row["id"];
		$_SESSION["user_name"] = $row["user_name"];
		$mysqli->query("DELETE FROM failed_login WHERE ip_address = '$ip'");
	} else {
		$message = "¡Usuario o contraseña invalido!";
		if ($failed_login_attempt < 3) {
			$mysqli->query("INSERT INTO failed_login (ip_address,date) VALUES ('$ip', NOW())");
		} else {
			$message = "Ha intentado más de 3 intentos no válidos. Introduzca el código de captcha.";
		}
	}
}
if(isset($_SESSION["user_id"])) {
header("Location:user_dashboard.php");
}
?>
Mostrar Captcha 3 intentos fallidos

Referencia:

Login failed

Espero que les sea de utilidad.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba