Önemli: reCAPTCHA API'nin 1.0 sürümü artık desteklenmiyor. Lütfen sürüm 2.0'a yükseltin. Daha fazla bilgi
Burada, reCAPTCHA Perl modülünü kullanmadan FormMail komut dosyanıza reCAPTCHA'yı nasıl ekleyeceğinizi açıklayacağız. Ne yaptığınızı bilmiyorsanız reCAPTCHA'yı da kullanabilirsiniz: Perl Modülü.
İstemci Tarafı (CAPTCHA resmi nasıl gösterilir?)
HTML sayfanızda, <form> öğesine aşağıdaki kodu eklemeniz gerekir:
<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>
Söylemeye gerek yoktur, ama yine de söyleyelim: Bu ikisini
aldığınız ortak anahtarla your_public_key
örnekleri
hesap oluşturma sürecinde. Gizli anahtarınızı yanlışlıkla kullanmamaya dikkat edin.
Bu işlem, temel olarak bir POST isteği aracılığıyla formmail.cgi (veya FormMail.pl) dosyasına iletilen iki parametre ekler:
Sunucu Tarafı (Kullanıcının doğru yanıtı girip girmediğini test etme)
Ardından, iki parametreyi işlemek ve reCAPTCHA sunucularından sorgulamayı doğrular. Bu noktada, kurulacak bütçeyi her ihtimale karşı FormMail.pl dosyanızın yedek bir kopyasını oluşturun. Aşağıdaki kodda, "+" satır anlamına gelir ve "-", FormMail komut dosyasına eklenmesi gerekir ve satırın buradan kaldırılması gerektiği anlamına gelir. Her durumda, satırların nerede eklenmesi veya kaldırılması gerektiğini göstermek için satırlarını kullanarak ekleyebilirsiniz.
İlk olarak, aşağıdaki satırı ekleyerek Perl'e LWP::UserAgent modülünü kullanmasını söylemeniz gerekir FormMail'e:
# ACCESS CONTROL FIX: Peter D. Thompson Yezek # # http://www.securityfocus.com/archive/1/62033 # ############################################################################## +use LWP::UserAgent; +
(Bu işlem için LWP::UserAgent modülü gereklidir. olmasını sağlamanız gerekir. Perl kurulumlarının çoğunda bu modül mevcuttur. Şu durumda: Modül yüklü değil, aşağıda Perl'i yüklemeye ilişkin bazı temel talimatları bulabilirsiniz modüllerini inceleyin.)
Ardından, aşağıda tanımlanan CAPTCHA kontrolü işlevini çağırmak için kod ekleyin.
# 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;
Şimdi, CAPTCHA yanıtını doğrulayın ve yanıt şununla eşleşmezse bir hata oluşturun: isteyebilirsiniz.
+############################################################################## +# 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. #
Son olarak, kontrol işleminin tekrarlanması durumunda hata mesajını yazdıran başarısız olur:
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; }
Hepsi bu kadar! reCAPTCHA artık sitenizde çalışıyor olmalıdır.