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

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

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

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

आपके एचटीएमएल पेज में, <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 (या FormMail.pl) को, दोनों पैरामीटर को मैनेज करने के लिए और reCAPTCHA सर्वर से चैलेंज की पुष्टि करें. इस समय, किसी भी स्थिति में FormMail.pl की बैकअप कॉपी बनाना एक अच्छा विचार है. नीचे दिए गए कोड में, "+" लाइन का मतलब है को FormMail स्क्रिप्ट में जोड़ना ज़रूरी है, और "-" इसका मतलब है कि लाइन को हटाने की ज़रूरत है. हर मामले में, हम लाइन के बगल में दिखने वाले टेक्स्ट का इस्तेमाल करके, यह बताते हैं कि लाइनों को कहां जोड़ना या हटाना है पंक्तियों के साथ फ़ॉर्म मेल खाती है.

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

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

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

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

     # 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 काम कर रहा होगा.

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

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