2017-08-15 167 views
0

Q1 - 我一直在閱讀reCaptcha的文檔,查看了許多不同的論壇案例,但我根本沒有使用API​​調用經驗 - 我試圖添加一個驗證碼到我的自定義聯繫表單中,但我試圖弄清楚如何/在哪裏發送驗證信息以及如何/在哪裏接收驗證步驟,以便我知道用戶是否得到驗證。正在驗證驗證碼

(邊問:爲什麼要驗證由驗證碼生成的令牌是不是夠好了,你可以告訴天氣或不拼圖/回答解決了?)

封閉頭前標籤:

<script src='https://www.google.com/recaptcha/api.js'></script> 

我的形式結束:

我可以看到串/令牌由一個正確的答案產生的,當我打電話:

grecaptcha.getResponse(); 

現在(據我所知)我要驗證這個字符串/令牌這是我卡住:

URL: https://www.google.com/recaptcha/api/siteverify 
METHOD: POST 

DOCS:https://developers.google.com/recaptcha/docs/verify

我與jQuery和香草相對體面JS,但是當涉及到API調用時,我幾乎沒有經驗,這就是爲什麼在文檔中,我不確定如何1 - 形成API調用(用於驗證),2 - 在哪裏調用API從模板文件 - 明智的,3 - 如何獲得響應,或者更確切地說響應如何回來。

正如我所提到的,我正在使用Bigcommerce商店,並且在幾個不同的領域中提到了Google reCaptcha文檔,這一步在服務器端(或應該是)完成。我知道我在我可以修改的模板文件中受到相當的限制 - 我可以查看和修改HTML/CSS/JS文件,但我無法訪問任何PHP。

任何幫助或推動正確的方向將不勝感激 - 在這一點上,我正在圈子尋找並嘗試閱讀/遵循相同的文檔(谷歌和其他)和論壇的情況。謝謝。

+0

Hi Tron,BC本身已經支持captcha,所以你不需要自己實現一個。在創建頁面時,顯示設置中有一個選項,https://support.bigcommerce.com/articles/Public/Display-Settings,直接與他們聯繫以瞭解更多關於使用此設置的信息可能會有所幫助。運氣好的 –

+0

另外 - 所有的JS web請求都歸結爲正式稱爲「XMLHttpRequest」的內容。 jQuery的Ajax功能使得執行web請求變得更加簡單,並且簡化爲幾行代碼。雖然研究異步執行,軟件中斷和JS事件循環仍然很重要,以便更好地理解底層概念。 –

回答

-1

reCaptcha驗證是爲了確保您收到的答案來自reCaptha服務器,用戶不是機器人,還沒有成熟,並且它還沒有被使用過多次。

所有這些對於運行應用程序的服務器來說都非常重要,更多的是顯示錶單的客戶端接受或拒絕要處理的表單。

這就是驗證必須在服務器上完成的原因。客戶端是一個不安全的環境,可以被欺騙,因此服務器不能相信它。

此外,做驗證你需要一個祕密API密鑰。因爲它是祕密的,它不能嵌入到客戶端代碼中。

如果您無法訪問php或無法添加和aditional php來進行驗證,我認爲您不能實施reCaptcha。

編輯我

的底線是,客戶端代碼(JS,jQuery的瀏覽器中運行)不能被信任做任何驗證從服務器的角度來看。

例如,假設您爲用戶實現了一個輸入元素,以輸入介於0和9之間的兩個隨機整數之和的結果。非常簡單。

在一些地方的JavaScript代碼有一個:

if(a + b === c){ 
    sendFormToServer(); 
}else{ 
    reject(); 
} 

任何使用瀏覽器的開發者工具可以繞過「如果」,並直接調用sendFormToServer()。而服務器無法知道它。

+0

這是正確的我無法看到/修改/添加任何PHP。如果除了reCaptcha之外還有其他選擇,我肯定對它開放,欣賞迴應。 – Tron

+0

只有在客戶端上運行的東西纔會執行。我在答案中增加了一個簡單的例子。 – Juan

0

試圖一個接一個地回答你的問題。

客戶端驗證碼被討論here,請檢查並注意考慮到Java腳本的強大功能,客戶端驗證碼不安全。

  1. reCAPTCHA的工作原理:一旦有人舉出以下腳本,谷歌將驗證 用戶。

    https://www.google.com/recaptcha/api.js 
    

    下面寫在窗體屬性將發送數據到google第一和 響應將與 屬性的當前形式命名的最終後加入克-驗證碼 - 響應

    <div class="g-recaptcha" data-sitekey="your_site_key"></div> 
    
  2. 如何驗證reCAPTCHA必須使用谷歌驗證此g-recaptcha響應。 [注:這是requried becaues 客戶端可以爲屬性克-reCAPTCHA的響應 發送任何隨機值,而無需通過驗證碼會]

    $verifyResponse = 
        file_get_contents('https://www.google.com/recaptcha/api/siteverify? 
        secret='.$YOUR_SECRET.'&response='.$_POST['g-recaptcha-response']) 
        /*allow_url_fopen must be ON if you want to use file_get_contents. 
        check it using phpinfo();*/ 
    
    
        file_put_contents("logfile", $verifyResponse, FILE_APPEND); 
        $responseData = json_decode($verifyResponse); 
    
        $register_result = 'Robot verification failed, please try again.'; 
        if($responseData->success) 
        { 
          $register_result = 'You are not a bot'; 
        } 
        else $register_result = 'You are a bot.'; 
    
  3. 驗證碼與HTML/JS/CSS驗證碼將無法正常工作爲你,如果你沒有PHP訪問。

  4. 作爲驗證碼的謎題驗證碼謎題也是可能的,這樣的驗證碼也可用,但它們在服務器端處理。