• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
تشخيص وارد كردن رمز بيش از سه بار
#1
سلام خسته نباشين
چطور مي تونم تشخيص بدم كه كاربر بيش از سه بار رمز عبور رو اشتباه وارد كرده
  پاسخ
تشکر شده توسط :
#2
میتونی نو بانک ذخیره کنی او user رو بعد تعداد بار خطاش رو هر بار update کنی بعد هر وقت 3 شد تعدادش مدیریتش کنی ...

(اما میدونی که این کار دیگه درست نیست ؟ یعنی سایت هایی که بعد از 3 یا 4 بار پسورد اشتباه ID طرف رو block میکنن کار درستی انجام نمیدن .. چون هر کسی میتونه این کار رو بکنه و ID شخص دیگه رو block کنه بهتر بعد از 3 بار اشتباه زدن راه حل دیگه ای برای کاربر در نظر بگیری مثل سوال امنیتی که قبلا پر کرده زمان ثبت نام )
  پاسخ
تشکر شده توسط :
#3
لطف مي كنين كد ها شو رو برام بزاريد ممنون ميشم
  پاسخ
تشکر شده توسط :
#4
(۱۳۹۵ مرداد ۱۲, ۰۲:۳۸ ب.ظ)sardar1 نوشته: لطف مي كنين كد ها شو رو برام بزاريد ممنون ميشم
متاسفانه بر اساس قوانین انجمن نمیشه کد آماده گذاشت شما شروع بکنید به کد نویسی اشکالات رو اینجا مطرح کنید من یا دیگر دوستان راهنمایی میکنیم.

اما برای شروع یه 2 تا روش برات میگذارم که کمک کنه اولین روش بدون استفاده از بانک هستش :
کد پی‌اچ‌پی:
if (empty($_SESSION['failed_login'])) 
{
    
$_SESSION['failed_login'] = 1;

elseif (isset(
$_POST['login'])) 
{
    
$_SESSION['failed_login']++;
}
 
// if login fail 3 times
if ($_SESSION['failed_login'] > 3) {
    
$error[] = 'U failed to login 3 times ' $_SESSION['failed_login'];


حالا دومین روش یه table درست کن مثل زیر :
کد:
CREATE TABLE `LoginAttempts`
(
`IP` VARCHAR( 20 ) NOT NULL ,
`Attempts` INT NOT NULL ,
`LastLogin` DATETIME NOT NULL
)
و بعد اینجوری ازش استفاده کن :
کد پی‌اچ‌پی:
<?php
function confirmIPAddress($value) {

  
$q "SELECT attempts, (CASE when lastlogin is not NULL and DATE_ADD(LastLogin, INTERVAL ".TIME_PERIOD.
  
" MINUTE)>NOW() then 1 else 0 end) as Denied FROM ".TBL_ATTEMPTS." WHERE ip = '$value'";

  
$result mysql_query($q$this->connection);
  
$data mysql_fetch_array($result); 

  
//Verify that at least one login attempt is in database

  
if (!$data) {
    return 
0;
  }
  if (
$data["attempts"] >= ATTEMPTS_NUMBER)
  {
    if(
$data["Denied"] == 1)
    {
      return 
1;
    }
    else
    { 
      
$this->clearLoginAttempts($value);
      return 
0
    }
  }
  return 
0;
}

function 
addLoginAttempt($value) {

   
//Increase number of attempts. Set last login attempt if required.

   
$q "SELECT * FROM ".TBL_ATTEMPTS." WHERE ip = '$value'";
   
$result mysql_query($q$this->connection);
   
$data mysql_fetch_array($result);
  
   if(
$data)
   {
     
$attempts $data["attempts"]+1;        

     if(
$attempts==3) {
       
$q "UPDATE ".TBL_ATTEMPTS." SET attempts=".$attempts.", lastlogin=NOW() WHERE ip = '$value'";
       
$result mysql_query($q$this->connection);
     }
     else {
       
$q "UPDATE ".TBL_ATTEMPTS." SET attempts=".$attempts." WHERE ip = '$value'";
       
$result mysql_query($q$this->connection);
     }
   }
   else {
     
$q "INSERT INTO ".TBL_ATTEMPTS." (attempts,IP,lastlogin) values (1, '$value', NOW())";
     
$result mysql_query($q$this->connection);
   }
}

function 
clearLoginAttempts($value) {
  
$q "UPDATE ".TBL_ATTEMPTS." SET attempts = 0 WHERE ip = '$value'";
  return 
mysql_query($q$this->connection);
}
?>
البته دیگه فکر کنم کد رو گذاشتم RolleyesRolleyes
  پاسخ
تشکر شده توسط : kasbookar


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان