[yii2] Afficher le captcha après l’échec de la tentative de connexion

Si vous disposez d’une page de connexion accessible via l’internet, cette page sera un jour ou l’autre attaquée. La raison en est qu’il est très facile pour un pirate de le faire.

Les attaques par force brute sont des tentatives d’accès à un compte en devinant le nom d’utilisateur et le mot de passe utilisés. L’attaque par force brute est en fait une vieille technique de la cybercriminalité. Cependant, elle est encore largement utilisée parce qu’elle est considérée comme efficace.

L’un des moyens de sécuriser un site web contre les attaques par force brute consiste à utiliser un captcha (Completely Automated Public Test to Tell Computers and Humans Apart). Dans ce tutoriel, nous apprendrons à activer captcha après que l’utilisateur ait échoué à se connecter. Pour savoir comment créer un captcha, vous pouvez lire [yii2]Créer un formulaire de connexion avec captcha.

Marche à suivre pour activer le captcha lorsque l’utilisateur ne parvient pas à se connecter :

1. Ajouter des champs captcha et des règles de validation à 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;
    }
     
    .............
    .............   
}

2. Ajouter des widgets à 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. Ajouter une action au contrôleur/SiteController.php

Pour que les captchas fonctionnent, vous devez ajouter une action captcha à controllers/SiteController.php. L’action existe peut-être déjà car le modèle standard Yii2 l’ajoute automatiquement.

.............
.............
  
class SiteController extends Controller
{
    .............
    .............
      
    public function actions()
    {
        return [
            .............
            .............
              
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
            ],
            .............
            .............
        ];
    }
      
    .............
    .............   
}

ARTICLES LIÉS

Dernières articles