Wichtig: Version 1.0 der reCAPTCHA API wird nicht mehr unterstützt. Führen Sie ein Upgrade auf Version 2.0 aus. Weitere Informationen
Hier erfahren Sie, wie Sie reCAPTCHA zu Ihrem FormMail-Skript hinzufügen, ohne den reCAPTCHA-Perl-Modul. Wenn Sie wissen, was Sie tun, können Sie alternativ das reCAPTCHA-Perl-Modul verwenden.
Clientseitig (Anleitung zum Anzeigen des CAPTCHA-Bildes)
Auf Ihrer HTML-Seite im <form>-Tag -Element hinzufügen, müssen Sie den folgenden Code hinzufügen:
<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>
Es versteht sich von selbst, aber wir sagen es trotzdem: Sie müssen die beiden
Instanzen von your_public_key
mit dem öffentlichen Schlüssel, den Sie erhalten haben
während der Kontoerstellung. Achten Sie darauf, dass Sie nicht versehentlich Ihren privaten Schlüssel verwenden.
Dadurch werden im Grunde zwei Parameter hinzugefügt, die an formmail.cgi (oder FormMail.pl) übergeben werden. durch eine POST-Anfrage, und zwar:
Serverseitig (So können Sie testen, ob der Nutzer die richtige Antwort eingegeben hat)
Als Nächstes müssen Sie formmail.cgi (oder FormMail.pl) ändern, um die beiden Parameter zu verarbeiten und die Aufgabe von den reCAPTCHA-Servern aus validieren. An dieser Stelle ist es wahrscheinlich eine gute Idee, erstellen Sie sicherheitshalber eine Sicherungskopie von FormMail.pl. Im Code unten „+“ bedeutet, dass die Linie dem FormMail-Skript hinzugefügt werden muss, und "-" dass die Linie daraus entfernt werden muss. In jedem Fall zeigen wir, wo die Linien hinzugefügt oder entfernt werden müssen, indem wir die angrenzenden im FormMail-Skript ein.
Zuerst müssen Sie Perl anweisen, das Modul LWP::UserAgent zu verwenden, indem Sie die folgende Zeile hinzufügen: an FormMail:
# ACCESS CONTROL FIX: Peter D. Thompson Yezek # # http://www.securityfocus.com/archive/1/62033 # ############################################################################## +use LWP::UserAgent; +
Dafür wird das Modul LWP::UserAgent benötigt. sich in Ihrer Perl-Umgebung befinden. Die meisten Installationen von Perl enthalten dieses Modul bereits. Falls Das Modul ist nicht installiert. Hier finden Sie einige grundlegende -Anweisungen zur Installation von Perl. Module.
Fügen Sie dann Code hinzu, um die unten definierte CAPTCHA-Prüffunktion aufzurufen.
# 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;
Überprüfen Sie nun die CAPTCHA-Antwort und generieren Sie einen Fehler, wenn die Antwort nicht mit dem Herausforderung.
+############################################################################## +# 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. #
Erstellen Sie abschließend die Funktion, die die Fehlermeldung für den Fall ausgibt, dass die Prüfung schlägt fehl:
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; }
Das war's! reCAPTCHA sollte jetzt auf Ihrer Website funktionieren.