در آموزش نمایش کپچا در لاگین ناموفق با php , قصد داریم به شما نشان بدیم , اگر کاربر بیشتر از ۳بار در هنگام لاگین به خطا برخورد و لاگین ناموفق داشت , یک کد کپچا را به کاربر نمایش بدیم .
این کار باعث می شود که کاربر عادی را از ربات جدا کنیم و از بسیاری از حملات دیکشنری و بروت فورس جلوگیری شود
در اینصورت میتوانید یک لینک ساخت سیستم بازیابی رمزعبور در php را نمایش بدید تا درصورتی که رمزعبور را فراموش کرد , بتواند آنرا از طریق ایمیل بازیابی کند .
در آموزش های قبلی با ساخت صفحه لاگین و ثبت نام با php و ساخت کپچا در php آشنا شدیم . پس در آموزش نمایش کپچا در لاگین ناموفق با php , قصد داریم این دو آموزش را ترکیب و لاگین ناموفق را با کپچا کنترل کنیم.
در این مثال , ما یک جدول MySQL برای اضافه کردن هر لاگین ناموفق داریم . ما لاگین نا موفق را با محاسبه تعداد سطرهای مربوط بر اساس IP کاربر انجام می دهیم . اگر تعداد عددی بیشتر از ۳ شود پس ما کد کپچا را به کار نمایش خواهیم داد.
کد HTML برای لاگین با کپچا
این کد شامل فرم لاگین با کد کپچا می باشد . این کد کپچا زمانی که کاربر بیشتر از ۳ بار تلاش برای لاگین را داشت , نمایش داده میشود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<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">Enter Login Details</td> </tr> <tr class="tablerow"> <td align="right">Username</td> <td><input type="text" name="user_name"></td> </tr> <tr class="tablerow"> <td align="right">Password</td> <td><input type="password" name="password"></td> </tr> <?php if (isset($failed_login_attempt) && $failed_login_attempt >= 3) { ?> <tr class="tablerow"> <td align="right"></td> <td><input name="captcha_code" type="text"><br><br><img src="captcha_code.php" /></td> </tr> <?php } ?> <tr class="tableheader"> <td align="center" colspan="2"><input type="submit" name="submit" value="Submit"></td> </tr> </table> </form> |
کد PHP برای محاسبه تعداد دفعات لاگین ناموفق
این کد برای محاسبه تعداد دفعات لاگین ناموفق را بر اساس IP کاربر استفاده می شود.
1 2 3 4 5 6 |
$mysqli = new mysqli('localhost','root','','blog_examples'); $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(); |
Insert کردن ورودی های لاگین ناموفق در دیتابیس
این کد نام کاربری و پسورد کاربر را برای لاگین اعتبار سنچی می کند و اگر یوزنیم و پسورد اشتباه بود , یک سطر همراه با آدرس IP کاربر و زمان را به دیتابیس اضافه می کند
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php session_start(); $message=""; $captcha = true; if(count($_POST)>0 && isset($_POST["captcha_code"]) && $_POST["captcha_code"]!=$_SESSION["captcha_code"]) { $captcha = false; $message = "Enter Correct Captcha Code"; } 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 = "Invalid Username or Password!"; if ($failed_login_attempt < 3) { $mysqli->query("INSERT INTO failed_login (ip_address,date) VALUES ('$ip', NOW())"); } else { $message = "You have tried more than 3 invalid attempts. Enter captcha code."; } } } |
دیدید به چه راحتی با چندتا شرط یک سیستم نمایش کپچا در لاگین ناموفق با php را راه اندازی کردیم .
این کار کمک بسیار زیادی در جلوگیری از حملات brute force بر روی صفحه لاگین می کند . در این حملات از یک ربات برای تست کردن زیاد یوزر و پسورد ها برای لاگین شدن به سیستم استفاده می شود .
هر گونه مشکلی در پیاده سازی کدهای نمایش کپچا در لاگین ناموفق با php داشتید , از قسمت نظرات با ما در ارتباط باشید . سریعا پاسخگوی سوالات شما هستیم.
موفق و پیروز باشید.