Important: La version 1.0 de l'API reCAPTCHA n'est plus compatible. Veuillez passer à la version 2.0. En savoir plus
Dans cet article, nous allons vous expliquer comment ajouter reCAPTCHA à votre script FormMail sans utiliser la méthode Module reCAPTCHA Perl. Si vous savez ce que vous faites, vous pouvez également utiliser le reCAPTCHA Module Perl.
Côté client (comment afficher l'image CAPTCHA)
Dans votre page HTML, dans l'élément <form>, vous devez ajouter le code suivant :
<script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k=your_public_key"> </script> <noscript> <iframe src="http://www.google.com/recaptcha/api/noscript?k=your_public_key" height="300" width="500" frameborder="0"></iframe> <textarea name="recaptcha_challenge_field" rows="3" cols="40"> </textarea> <input type="hidden" name="recaptcha_response_field" value="manual_challenge"> </noscript>
Cela va probablement de soi, mais nous le dirons quand même: vous devez remplacer les deux
Instances de your_public_key
avec la clé publique que vous avez reçue
pendant le processus de création du compte. Veillez à ne pas utiliser vos données
par erreur.
Cette opération permet d'ajouter deux paramètres, qui sont transmis à formmail.cgi (ou FormMail.pl). via une requête POST, à savoir:
Côté serveur (comment vérifier si l'utilisateur a saisi la bonne réponse)
Vous devez ensuite modifier formmail.cgi (ou FormMail.pl) pour gérer les deux paramètres et à partir des serveurs reCAPTCHA. À ce stade, c’est probablement une bonne idée de créez une copie de sauvegarde de votre fichier FormMail.pl, au cas où. Dans le code ci-dessous, "+" signifie que la ligne doit être ajouté au script FormMail, et "-" signifie que la ligne doit être supprimée de celui-ci. Dans tous les cas, nous indiquons où les lignes doivent être ajoutées ou supprimées en montrant les lignes adjacentes du script FormMail.
Vous devez d'abord demander à Perl d'utiliser le module LWP::UserAgent en ajoutant la ligne suivante : dans FormMail:
# ACCESS CONTROL FIX: Peter D. Thompson Yezek # # http://www.securityfocus.com/archive/1/62033 # ############################################################################## +use LWP::UserAgent; +
(Pour ce faire, le module LWP::UserAgent doit être présent dans votre environnement Perl. La plupart des installations de Perl comportent déjà ce module. Au cas où le module n'est pas installé. Voici quelques instructions de base pour l'installation de Perl. modules.)
Ajoutez ensuite du code pour appeler la fonctionnalité de vérification du CAPTCHA définie ci-dessous.
# Check Required Fields &check_required; +# Check the captcha challenge and response. +&check_captcha; + # Send E-Mail &send_mail; # Return HTML Page or Redirect User &return_html;
Maintenant, validez la réponse CAPTCHA et générez une erreur si la réponse ne correspond pas au d'authentification.
+############################################################################## +# Check the CAPTCHA response via the reCAPTCHA service. +sub check_captcha { + + my $ua = LWP::UserAgent->new(); + my $result=$ua->post( + 'https://www.google.com/recaptcha/api/verify', + { + privatekey => 'your_private_key', + remoteip => $ENV{'REMOTE_ADDR'}, + challenge => $Form{'recaptcha_challenge_field'}, + response => $Form{'recaptcha_response_field'} + }); + + if ( $result->is_success && $result->content =~ /^true/) { + return; + } else { + &error('captcha_failed'); + } +} + # NOTE rev1.91: This function is no longer intended to stop abuse, that # # functionality is now embedded in the checks made on @recipients and the # # recipient form field. #
Enfin, créez la fonctionnalité qui affiche le message d'erreur en cas d'échec de la vérification :
if ($Config{'missing_fields_redirect'}) { print "Location: " . &clean_html($Config{'missing_fields_redirect'}) . "\n\n"; } + } + elsif ($error eq 'captcha_failed') { + print <<"(END ERROR HTML)"; +Content-type: text/html + +<html> + <head> + <title>Error: Captcha Check Failed</title> + </head> + <body bgcolor=#FFFFFF text=#000000> + <center> + <table border=0 width=600 bgcolor=#9C9C9C> + <tr><th><font size=+2>Error: Captcha Check Failed</font></th></tr%gt; + </table> + <table border=0 width=600 bgcolor=#CFCFCF> + <tr><td>The Captcha response of the form you submitted did not match the challenge. + Please check the form and make sure that your response matches the challenge in the captcha image. + You can use the browser back button to return to the form. + </center%gt; + </td></tr> + </table> + </center> + </body> +</html> +(END ERROR HTML) + } else { foreach $missing_field (@error_fields) { $missing_field_list .= "<li>" . &clean_html($missing_field) . "\n"; . . . </html> (END ERROR HTML) } - } - exit; }
C'est tout ! reCAPTCHA devrait maintenant fonctionner sur votre site.