Как ограничить количество попыток авторизации.
Как ограничить количество попыток авторизации.
К примеру, при нескольких не успешных попыток, блокировать форму авторизации на пару минут???
Re: Как ограничить количество попыток авторизации.
здесь например после нескольких попыток показывается капча
https://github.com/clevertech/YiiBoiler ... inForm.php
https://github.com/clevertech/YiiBoiler ... /login.php
https://github.com/clevertech/YiiBoiler ... inForm.php
https://github.com/clevertech/YiiBoiler ... /login.php
Re: Как ограничить количество попыток авторизации.
айпишник ложите в сессию
Re: Как ограничить количество попыток авторизации.
как это организовать???
вот мой компонент UserIdentity
модель LoginForm
и вот контроллер SiteController
при этом вместо БД я использую *.txt в main у меня прописан путь к нему!!
вот мой компонент UserIdentity
Код: Выделить всё
<?php
class UserIdentity extends CUserIdentity
{
public function authenticate()
{
$file=Yii::app()->params['file'];
$users=array(
'admin'=>'admin',
);
file_put_contents($file, serialize($users));
$users = unserialize(trim(file_get_contents($file)));
if(!isset($users[$this->username]))
$this->errorCode=self::ERROR_USERNAME_INVALID;
elseif($users[$this->username]!==$this->password)
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
$this->errorCode=self::ERROR_NONE;
return !$this->errorCode;
}
}
Код: Выделить всё
<?php
class LoginForm extends CFormModel
{
public $username;
public $password;
public $rememberMe;
private $_identity;
public function rules()
{
return array(
array('username, password', 'required'),
array('rememberMe', 'boolean'),
array('password', 'authenticate'),
);
}
public function attributeLabels()
{
return array(
'username'=>'Логин',
'password'=>'Пароль',
'rememberMe'=>'Запомнить меня',
);
}
public function authenticate($attribute,$params)
{
if(!$this->hasErrors())
{
$identity=new UserIdentity($this->username,$this->password);
$identity->authenticate();
switch($identity->errorCode)
{
case UserIdentity::ERROR_NONE: {
break;
}
case UserIdentity::ERROR_USERNAME_INVALID: {
$this->addError('username','Пользователь не существует!');
break;
}
case UserIdentity::ERROR_PASSWORD_INVALID: {
$this->addError('password','Вы указали неверный пароль!');
break;
}
}
}
}
public function login()
{
if($this->_identity===null)
{
$this->_identity=new UserIdentity($this->username,$this->password);
$this->_identity->authenticate();
}
if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
{
$duration=$this->rememberMe ? 3600*24*7 : 0; // 7 days
Yii::app()->user->login($this->_identity,$duration);
return true;
}
else
return false;
}
}
Код: Выделить всё
<?php
class SiteController extends Controller
{
public function actionIndex()
{
$this->render('index');
}
public function filters()
{
return array(
'accessControl',
);
}
public function actionError()
{
if($error=Yii::app()->errorHandler->error)
{
if(Yii::app()->request->isAjaxRequest)
echo $error['message'];
else
$this->render('error', $error);
}
}
public function actionLogin()
{
$model=new LoginForm;
if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
if(isset($_POST['LoginForm']))
{
$model->attributes=$_POST['LoginForm'];
if($model->validate() && $model->login())
$this->redirect(Yii::app()->user->returnUrl);
}
$this->render('login',array('model'=>$model));
}
public function actionLogout()
{
Yii::app()->user->logout();
$this->redirect(Yii::app()->homeUrl);
}
}
-
- Сообщения: 1268
- Зарегистрирован: 2013.07.17, 17:37
Re: Как ограничить количество попыток авторизации.
от скрипта не поможет, а руками ломать имхо бредfutbolim писал(а):айпишник ложите в сессию
Re: Как ограничить количество попыток авторизации.
частично задачу решил!!
Но все же есть еще вопрос, объясните пожалуйста как правильно вызывать int time(void)
я делаю
для того что бы потом
как time возвращает количество секунд???
Но все же есть еще вопрос, объясните пожалуйста как правильно вызывать int time(void)
я делаю
Код: Выделить всё
$round_numerator = 60 * 5;
$rounded_time = (time() - $round_numerator );
Код: Выделить всё
if($rounded_time<$users['time'])
$this->addError('button','Форма заблокирована на 5 минут');
Re: Как ограничить количество попыток авторизации.
так: time()Ren4ik писал(а):частично задачу решил!!
Но все же есть еще вопрос, объясните пожалуйста как правильно вызывать int time(void)
я делаюдля того что бы потомКод: Выделить всё
$round_numerator = 60 * 5; $rounded_time = (time() - $round_numerator );
как time возвращает количество секунд???Код: Выделить всё
if($rounded_time<$users['time']) $this->addError('button','Форма заблокирована на 5 минут');
Re: Как ограничить количество попыток авторизации.
наверное я не правильно выразился))))
$rounded_time = (time() - $round_numerator ); - здесь я сделал на 5 минут меньше от текущего!!!
if($rounded_time<$users['time']) - а вот здесь я проверяю, время которое на 5 минут меньше, от текущего в файле!
так вот, как $rounded_time будит возвращать те 5 минут на которые я уменьшил, что бы когда значения времени стали равны, допустим происходил какой то переход...
$rounded_time = (time() - $round_numerator ); - здесь я сделал на 5 минут меньше от текущего!!!
if($rounded_time<$users['time']) - а вот здесь я проверяю, время которое на 5 минут меньше, от текущего в файле!
так вот, как $rounded_time будит возвращать те 5 минут на которые я уменьшил, что бы когда значения времени стали равны, допустим происходил какой то переход...
Re: Как ограничить количество попыток авторизации.
time() показывает кол-во секунд прошедших от начала эпохи UNIX на момента вызова.
http://www.php.net/manual/ru/function.time.php
http://www.php.net/manual/ru/function.time.php
Re: Как ограничить количество попыток авторизации.
всем спасибо за помощь, РАЗОБРАЛСЯ уже)))
Re: Как ограничить количество попыток авторизации.
Напиши свое рецепт решение!
Будет полезно, от всякого бруто и прочего!
Будет полезно, от всякого бруто и прочего!
- dignityinside
- Сообщения: 76
- Зарегистрирован: 2013.04.04, 17:57
- Контактная информация:
Re: Как ограничить количество попыток авторизации.
Мне тоже интересно было бы посмотреть такой рецепт.
Мой блог:
https://protonalex.com
https://protonalex.com