Formsमेल के साथ reCAPTCHA का इस्तेमाल करना

अहम जानकारी: reCAPTCHA API का 1.0 वर्शन अब काम नहीं करता. कृपया इसे 2.0 वर्शन पर अपग्रेड करें. ज़्यादा जानें

यहां हम आपको Re कैप्चा Perl मॉड्यूल का इस्तेमाल किए बिना, reCAPTCHA को अपनी स्क्रिप्ट में जोड़ने का तरीका बताएंगे. अगर आपको पता है कि आपको क्या करना है, तो reCAPTCHA Perl मॉड्यूल का इस्तेमाल करें.

क्लाइंट साइड (कैप्चा इमेज दिखाने का तरीका)

अपने एचटीएमएल पेज में, <form> एलिमेंट के अंदर, आपको नीचे दिया गया कोड जोड़ना होगा:

  <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>

आपको शायद यह बताने की ज़रूरत नहीं है, लेकिन हम फिर भी इसे कहेंगे: आपको your_public_key के दो इंस्टेंस को उस सार्वजनिक कुंजी से बदलना होगा जो आपको खाता बनाते समय मिली थी. ध्यान रखें कि आप गलती से अपनी निजी कुंजी का उपयोग न कर लें.

यह मूल रूप से दो पैरामीटर जोड़ेगा, जिन्हें formmail.cgi (या formMail.pl) को पोस्ट अनुरोध के ज़रिए पास किया जाता है, ये नाम हैं:

  • recaptcha_challenge_field: यह वह चैलेंज है जिसे आपकी सार्वजनिक कुंजी से बनाया गया है.
  • recaptcha_response_field: यह ऊपर दिए गए चैलेंज के लिए उपयोगकर्ता का सबमिट किया गया जवाब है.
  • सर्वर साइड (यह कैसे पता करें कि उपयोगकर्ता ने सही जवाब दिया है या नहीं)

    इसके बाद, आपको दोनों पैरामीटर को मैनेज करने के लिए, formmail.cgi (या FormsMail.pl) में बदलाव करना होगा. साथ ही, reCAPTCHA सर्वर से मिली चुनौती की पुष्टि करनी होगी. इस समय, बेहतर होगा कि आप फ़ॉर्ममेल.pl की एक बैकअप कॉपी बना लें, ताकि ज़रूरत पड़ने पर आप उसे कॉपी कर सकें. नीचे दिए गए कोड में, "+" का मतलब है कि लाइन को FormsMail स्क्रिप्ट में जोड़ना ज़रूरी है और "-" का मतलब है कि लाइन को इससे हटाना है. हर मामले में, हम FormsMail स्क्रिप्ट में उसके आस-पास की लाइन दिखाकर दिखाते हैं कि लाइन को कहां जोड़ना या हटाना है.

    सबसे पहले, आपको Perl को यह बताना होगा कि वह LWP::UserAgent मॉड्यूल का इस्तेमाल करे. ऐसा करने के लिए, फ़ॉर्ममेल में नीचे दी गई लाइन जोड़नी होगी:

     # ACCESS CONTROL FIX: Peter D. Thompson Yezek                                #
     #                     http://www.securityfocus.com/archive/1/62033           #
     ##############################################################################
     +use LWP::UserAgent;
     +
    

    (इसके लिए, मॉड्यूल LWP::UserAgent आपके Perl एनवायरमेंट में होना ज़रूरी है. Perl के ज़्यादातर इंस्टॉलेशन में पहले से ही यह मॉड्यूल होता है. अगर यह मॉड्यूल इंस्टॉल नहीं किया गया है, तो यहां Perl मॉड्यूल इंस्टॉल करने के बारे में कुछ बुनियादी निर्देश दिए गए हैं.)

    फिर, नीचे बताई गई कैप्चा जांच की सुविधा को कॉल करने के लिए कोड जोड़ें.

     # 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;
    

    अब, कैप्चा के ज़रिए दिए गए जवाब की पुष्टि करें. साथ ही, अगर जवाब चुनौती से मेल नहीं खाता है, तो गड़बड़ी की सूचना दें.

     +##############################################################################
     +# 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.                                                   #
    

    आखिर में, जांच के फ़ेल होने पर गड़बड़ी के मैसेज को प्रिंट करने वाली सुविधा बनाएं:

             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;
     }
    

    बस हो गया! reCAPTCHA अब आपकी साइट पर काम करने लगेगा.

    इसके बारे में और पढ़ें

  • रंग-रूप को पसंद के मुताबिक बनाना
  • सलाह और दिशा-निर्देश
  • किसी समस्या को हल करना