Bonjour, j'ai souhaite mettre en place une protection anti-brute force pour ma page de connexion avec un reCAPTCHA.
J'ai trouvé un tuto sur internet avec quelque chose qui à l'air de marcher mais il y a un truc qui m'échappe notamment dans la partie retour d'une API (je ne travail pas souvent avec des API).
Les bouts de mon code :
Mon formulaire :
<script src="https://www.google.com/recaptcha/api.js" async defer></script><div class="container col-xl-10 col-xxl-8 px-4 py-0"><div class="row align-items-center g-lg-5 py-5"><div class="col-lg-7 text-center text-lg-start"><h1 class="display-4 fw-bold lh-1 mb-3">PORTAIL</h1><p class="col-lg-10 fs-4">Bienvenue sur le portail. N'hésitez pas à nous faire un retour si vous avez rencontré des problèmes lors de la navigation.<br> Bonne journée à vous.<br> Cordialement. </br> </div> <div class="col-md-10 mx-auto col-lg-5"> <form class="p-4 p-md-5 border rounded-3 bg-light" method="POST" action="<?= URL ?>validation_login"> <div class="form-floating mb-3"> <input type="text" class="form-control" id="login" placeholder="AAAA0000" name="login" required> <label for="login">CUID</label> </div> <div class="form-floating mb-3"> <input type="password" class="form-control" id="password" name="password" placeholder="Mot de passe" required> <label for="password">Mot de passe</label> </div> <button class="w-100 btn btn-lg btn-primary bouton border-0" id="vdcsolo" type="submit">Connexion</button> <hr class="my-4"> <a href="<?= URL ?>users/motdepasse"><small class="text-muted">Pour un mot de passe oublié, cliquez ici.</small></a> <div class="g-recaptcha" data-sitekey="ma_clé_site"></div><br><br> </form> </div> </div></div>
Ma fonction pour se connecter :
publicfunctionisCombinaisonValide($login,$password){if(isset($_POST['g-recaptcha-response'])&&!empty($_POST['g-recaptcha-response'])){$secret='ma_clé_secrète';$verifyResponse=@file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);$responseData=json_decode($verifyResponse);if($responseData->success){$passwordBD=$this->getPasswordUser($login);if(password_verify($password,$passwordBD)){return true;}else{
Toolbox::ajouterMessageAlerte("Echec de la comparaison - Code erreur: #UM04", Toolbox::COULEUR_ROUGE);return false;}}else{var_dump($_POST['g-recaptcha-response']);?><div style="color: red;"><b>Robot verification failed, please try again.</b></div><?php}}else{?><div style="color: red;"><b>Please do the robot verification.</b></div><?php}}
Mon erreur avec mes 2 var_dump() le $_POST['g-recaptcha-response'] et l'autre tout en bas c'est mon mdp que je rentre :
llaumegui
>
jordane45
Messages postés38424Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention16 février 2025 Modifié le 12 oct. 2022 à 08:36
D'accord et pourquoi il n'arrive pas à le lire et comment remédier à ça ?
Pour info au départ j'avais file_get_contents(...) au lieu de @file_get_contents(...) et j'avais cette erreur :
11 oct. 2022 à 15:51
Bonjour, je fais déjà un json_decode à ce niveau là juste au dessus de mon if :
11 oct. 2022 à 16:11
Fais un var_dump de verifyResponse puis de responseData
11 oct. 2022 à 16:25
J'ai fais les deux var_dump() au même niveau que mon var_dump précédent :
le var_dump($verifyResponse) -> bool(false)
le var_dump(responseData) -> NULL
11 oct. 2022 à 16:51
C'est donc qu'il n'arrive pas à lire le contenu de l'url dans l'instruction
Modifié le 12 oct. 2022 à 08:36
D'accord et pourquoi il n'arrive pas à le lire et comment remédier à ça ?
Pour info au départ j'avais file_get_contents(...) au lieu de @file_get_contents(...) et j'avais cette erreur :