Se você tiver uma página de login que possa ser acessada pela Internet, em algum momento essa página será atacada. O motivo disso é que é muito fácil para um invasor fazer isso.
Os ataques de força bruta são tentativas de obter acesso a uma conta adivinhando o nome de usuário e a senha usados. O ataque de força bruta é, na verdade, uma técnica antiga no crime cibernético. No entanto, ela ainda é amplamente usada porque é considerada eficaz.
Uma maneira de proteger um site contra ataques de força bruta é usar um captcha (Completely Automated Public Test to Tell Computers and Humans Apart). Neste tutorial, aprenderemos a ativar o captcha depois que o usuário não conseguir fazer login. Para saber como criar um captcha, você pode ler em [yii2]Create a Login Form with Captcha.
Etapas para ativar o captcha depois que o usuário não conseguir fazer login:
1. Adicionar campos captcha e regras de validação a models/LoginForm.php
class LoginForm extends Model { ............. ............. public $verifyCode; ............. public function rules() { return [ ............. ............. ['verifyCode', 'required', 'when'=>function(){return $this->loginFailed;}], ['verifyCode', 'captcha', 'when'=>function(){return $this->loginFailed;}], ............. ............. ]; } public function validatePassword($attribute, $params) { if (!$this->hasErrors()) { ............. if (!$user || !$user->validatePassword($this->password)) { Yii::$app->session->set('_loginAttempts', Yii::$app->session->get('_loginAttempts', 0)+1); ............. } } } //Check number login failed public function getLoginFailed() { return Yii::$app->session->get('_loginAttempts', 0) > 3; } ............. ............. }
Outros artigos interessantes
2. Adicionar widgets ao views/site/login.php
............. ............. <div class="site-login"> ............. ............. <div class="row"> <div class="col-lg-5"> <?php $form = ActiveForm::begin(['id' => 'login-form']); ?> ............. ............. <?php if($model->loginFailed){ echo $form->field($model, 'verifyCode')->widget(\yii\captcha\Captcha::class); } ?> ............. ............. <?php ActiveForm::end(); ?> </div> </div> </div>
3. Adicionar ação ao controlador/SiteController.php
Para que os captchas funcionem, você precisará adicionar uma ação captcha ao controllers/SiteController.php. Talvez a ação já exista porque o modelo de aplicativo padrão Yii2 adiciona-o automaticamente.
............. ............. class SiteController extends Controller { ............. ............. public function actions() { return [ ............. ............. 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', ], ............. ............. ]; } ............. ............. }