正在验证验证码

问题描述:

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事件循环仍然很重要,以便更好地理解底层概念。 –

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

试图一个接一个地回答你的问题。

客户端验证码被讨论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. 作为验证码的谜题验证码谜题也是可能的,这样的验证码也可用,但它们在服务器端处理。