2012-07-29 57 views
0

我註冊了reCaptcha,獲得了我的私鑰/公鑰,創建了我的recaptcha.cfm並將代碼放在了我的表單中。當您訪問網址時,表單完美呈現,但即使該人沒有在驗證碼中放入任何內容,該表單也會提交。這是我的recaptcha.cfm的代碼,我在recaptcha.cfm下的「示例」中註明了表單頁的相關代碼。任何幫助將不勝感激。謝謝。無法使我的reCaptcha在我的ColdFusion表單上工作

<cfsetting enablecfoutputonly="true"> 
<!--- 
    Use the reCAPTCHA API to verify human input. 

    reCAPTCHA improves the process of digitizing books by sending words that 
    cannot be read by computers to the Web in the form of CAPTCHAs for 
    humans to decipher. More specifically, each word that cannot be read 
    correctly by OCR is placed on an image and used as a CAPTCHA. This is 
    possible because most OCR programs alert you when a word cannot be read 
    correctly. 

    You will need a key pair from http://recaptcha.net/api/getkey to use this tag. 


    Sample 
    -------------------------------- 

     <html> 
     <body> 

     <cfform> 

      <cf_recaptcha 
       privateKey="6LepjdQSAAAAAMspsO04gZUXltxddkiI0ZgSF02h" 
       publicKey="6LepjdQSAAAAADoLvfvgkwacBAI_GbL-nTy2zvS6"> 

      <cfinput type="submit" name="submit"> 

     </cfform> 

     <cfif isDefined("form.submit")> 
      <cfoutput>recaptcha says #form.recaptcha#</cfoutput> 
     </cfif> 

     </body> 
     </html> 


---> 

<cfscript> 
    CHALLENGE_URL = "http://api.recaptcha.net"; 
    SSL_CHALLENGE_URL = "https://api-secure.recaptcha.net"; 
    VERIFY_URL = "http://api-verify.recaptcha.net/verify"; 
</cfscript> 

<cfif not structKeyExists(attributes, "publicKey")> 
    <cfthrow type="RECAPTCHA_ATTRIBUTE" 
     message="recaptcha: required attribute 'publicKey' is missing"> 
</cfif> 

<cfif not structKeyExists(attributes, "privateKey")> 
    <cfthrow type="RECAPTCHA_ATTRIBUTE" 
     message="recaptcha: required attribute 'privateKey' is missing"> 
</cfif> 

<cftry> 

    <cfparam name="attributes.action" default="render"> 

    <cfif not listContains("render,check", attributes.action)> 
     <cfset sInvalidAttr="action not render|check"> 
     <cfthrow> 
    </cfif> 

    <cfset sInvalidAttr="ssl not true|false"> 
    <cfparam name="attributes.ssl" type="boolean" default="false"> 

    <cfparam name="attributes.theme" type="regex" pattern="(red|white|blackglass)" default="red"> 

    <cfif not listContains("red,white,blackglass", attributes.theme)> 
     <cfset sInvalidAttr="theme not red|white|blackglass"> 
     <cfthrow> 
    </cfif> 

    <cfset sInvalidAttr="tabIndex not numeric"> 
    <cfparam name="attributes.tabIndex" type="numeric" default="0"> 

<cfcatch type="any"> 
    <cfthrow type="RECAPTCHA_ATTRIBUTE" 
     message="recaptcha: attribute #sInvalidAttr#"> 
</cfcatch> 
</cftry> 

<cfif isDefined("form.recaptcha_challenge_field") and isDefined("form.recaptcha_response_field")> 

    <cftry> 
     <cfhttp url="#VERIFY_URL#" method="post" timeout="5" throwonerror="true"> 
      <cfhttpparam type="formfield" name="privatekey" value="#attributes.privateKey#"> 
      <cfhttpparam type="formfield" name="remoteip" value="#cgi.REMOTE_ADDR#"> 
      <cfhttpparam type="formfield" name="challenge" value="#form.recaptcha_challenge_field#"> 
      <cfhttpparam type="formfield" name="response" value="#form.recaptcha_response_field#"> 
     </cfhttp> 
    <cfcatch> 
     <cfthrow type="RECAPTCHA_NO_SERVICE" 
      message="recaptcha: unable to contact recaptcha verification service on url '#VERIFY_URL#'"> 
    </cfcatch> 
    </cftry> 

    <cfset aResponse = listToArray(cfhttp.fileContent, chr(10))> 
    <cfset form.recaptcha = aResponse[1]> 
    <cfset structDelete(form, "recaptcha_challenge_field")> 
    <cfset structDelete(form, "recaptcha_response_field")> 

    <cfif aResponse[1] eq "false" and aResponse[2] neq "incorrect-captcha-sol"> 
     <cfthrow type="RECAPTCHA_VERIFICATION_FAILURE" 
      message="recaptcha: the verification service responded with error '#aResponse[2]#'. See http://recaptcha.net/apidocs/captcha/ for error meanings."> 
    </cfif> 

<cfelse> 

    <cfset form.recaptcha = false> 

</cfif> 

<cfif attributes.action eq "render"> 

    <cfif attributes.ssl> 
     <cfset challengeURL = SSL_CHALLENGE_URL> 
    <cfelse> 
     <cfset challengeURL = CHALLENGE_URL> 
    </cfif> 

    <cfoutput> 
    <script type="text/javascript"> 
    <!-- 
     var RecaptchaOptions = { 
      theme : '#attributes.theme#', 
      tabindex : #attributes.tabIndex# 
     }; 
    //--> 
    </script> 
    <script type="text/javascript" 
     src="#challengeURL#/challenge?k=#attributes.publicKey#"> 
    </script> 
    <noscript> 
     <iframe src="#challengeURL#/noscript?k=#attributes.publicKey#" 
      height="300" width="500" frameborder="0"></iframe><br> 
     <textarea name="recaptcha_challenge_field" rows="3" cols="40"> 
     </textarea> 
     <input type="hidden" name="recaptcha_response_field" 
      value="manual_challenge"> 
    </noscript> 
    </cfoutput> 

</cfif> 

<cfsetting enablecfoutputonly="false"> 

回答

2

該自定義標記嚴重過時。您需要更新網址,因爲Google改變了它們。他們改成這樣:

CHALLENGE_URL = "http://www.google.com/recaptcha/api"; 
SSL_CHALLENGE_URL = "https://www.google.com/recaptcha/api"; 
VERIFY_URL = "http://www.google.com/recaptcha/api/verify"; 

我已經發布這個自定義標籤的更新版本,其主旨在於這裏:https://gist.github.com/2210356

相關問題