Problème reCAPTCHA PHP
llaumegui -
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 :
public function isCombinaisonValide($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 :
Et quand je rentre le liens dans la barre d'url :
https://www.google.com/recaptcha/api/siteverify?secret=maclé%3BSecr=è%3Bte=&response=laValeurDeMonVarDump
ça me retourne bien :
Donc le seul problème je pense que comme le dit l'erreur c'est au niveau de mon if:
if($responseData->success)
Je ne sais pas comment savoir que mon appel à l'API retourne bien :
"success": true
J'pense que ça doit pas être compliqué mais comme je vous dit je travail très rarement avec des API donc si vous pouvez m'aider je suis preneur !
Cdt


Bonjour, je fais déjà un json_decode à ce niveau là juste au dessus de mon if :
Fais un var_dump de verifyResponse puis de responseData
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
C'est donc qu'il n'arrive pas à lire le contenu de l'url dans l'instruction
$verifyResponse = @file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);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 :