Penting: reCAPTCHA API versi 1.0 tidak lagi didukung. Harap upgrade ke Versi 2.0. Pelajari lebih lanjut
Di sini kami akan menjelaskan cara menambahkan reCAPTCHA ke skrip FormMail tanpa menggunakan Modul Perl reCAPTCHA. Jika Anda tahu apa yang Anda lakukan, Anda dapat menggunakan Modul Perl reCAPTCHA sebagai alternatif.
Sisi Klien (Cara memunculkan gambar CAPTCHA)
Di halaman HTML Anda, di dalam <form> Anda harus menambahkan kode berikut:
<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>
Mungkin tidak perlu dikatakan lagi, tetapi kami akan tetap mengatakannya: Anda harus mengganti keduanya
instance your_public_key
dengan kunci publik yang Anda terima
selama proses pembuatan akun. Pastikan Anda tidak menggunakan kunci
pribadi secara tidak sengaja.
Ini pada dasarnya akan menambahkan dua parameter, yang diteruskan ke formmail.cgi (atau FormMail.pl) melalui permintaan POST, yaitu:
Sisi Server (Cara menguji apakah pengguna memasukkan jawaban yang benar)
Selanjutnya, Anda perlu mengubah formmail.cgi (atau FormMail.pl) untuk menangani dua parameter dan untuk memvalidasi tantangan dari server reCAPTCHA. Pada tahap ini, mungkin adalah ide yang baik untuk membuat salinan cadangan FormMail.pl, untuk berjaga-jaga. Pada kode di bawah, "+" berarti garis perlu ditambahkan ke skrip FormMail, dan "-" berarti garis tersebut harus dihapus darinya. Dalam setiap kasus, kita menunjukkan tempat baris perlu ditambahkan atau dihapus dengan menampilkan baris yang berdekatan dalam skrip FormMail.
Pertama, Anda perlu memberi tahu Perl untuk menggunakan modul LWP::UserAgent dengan menambahkan baris berikut ke FormMail:
# ACCESS CONTROL FIX: Peter D. Thompson Yezek # # http://www.securityfocus.com/archive/1/62033 # ############################################################################## +use LWP::UserAgent; +
(Ini akan memerlukan modul LWP::UserAgent berada di lingkungan Perl Anda. Sebagian besar penginstalan Perl sudah memiliki modul ini. Dalam kasus modul tidak terinstal, berikut beberapa petunjuk dasar tentang cara menginstal Perl modul.)
Kemudian, tambahkan kode untuk memanggil fungsi pemeriksaan CAPTCHA yang dijelaskan di bawah.
# 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;
Sekarang, validasikan respons CAPTCHA dan buat error jika respons tidak cocok dengan tantangan.
+############################################################################## +# 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. #
Terakhir, buat fungsi yang mencetak pesan error jika pemeriksaan gagal:
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; }
Selesai! reCAPTCHA kini akan berfungsi di situs Anda.