2

在我的网站上实施 recaptcha。一种选择是 google API 。但为此我需要使用域名注册以获取 API 密钥。我们还有其他方法可以做到吗?

4

3 回答 3

2

您本身不一定需要域名来注册。

他们有一个“全局密钥”的概念,其中一个域密钥将用于多个域。注册时,选择“在所有域上启用此密钥(全局密钥)”选项,并使用唯一标识符(domainkey.abhilasha.com)就可以了,您最终可以使用来自任何域的密钥。

于 2013-05-22T21:59:01.643 回答
2

一种方法:将此代码添加到由 html 表单调用的 perl 文件中:当然是简化的

my @field_names=qw(name branch email g-recaptcha-response);
foreach $field_name (@field_names)
   {
      if (defined param("$field_name")) 
          {
              $FIELD{$field_name} = param("$field_name");   
}
}

$captcha=$FIELD{'g-recaptcha-response'};

use LWP::Simple;

$secretKey = "put your key here";
$ip = remote_host;
#Remove # rem to test submitted variables are present
#print "secret= $secretKey";
#print " and response= $captcha";
#print " and remoteip= $ip";


$URL = "https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$captcha."&remoteip=".$ip;
$contents = get $URL or die;

# contents variable takes the form of: "success": true, "challenge_ts": "2016-11-21T16:02:41Z", "hostname": "www.mydomain.org.uk" 
use Data::Dumper qw(Dumper);

# Split contents variable by comma:
my ($success, $challenge_time, $hostname) = split /,/, $contents; 

# Split success variable by colon:
my ($success_title, $success_value) = split /:/, $success; 

#strip whitespace:
$success_value =~ s/^\s+//;

if ($success_value eq "true")
    {

        print "it worked";
    }else{
       print "it did not";
   }
于 2016-11-21T20:31:21.073 回答
-3

如果您只是想阻止垃圾邮件,我更喜欢蜜罐验证码方法:http ://haacked.com/archive/2007/09/10/honeypot-captcha.aspx

在您的表单上放置一个应该留空的输入字段,然后用 CSS 将其隐藏(最好在外部 CSS 文件中)。机器人会找到它并将垃圾邮件放入其中,但人类不会看到它。

在您的表单验证脚本中,检查字段的长度,如果它包含任何字符,则不处理表单提交。

于 2013-05-22T21:58:31.840 回答