Recaptcha在现场网站上始终无效

时间:2012-08-11 20:35:52

标签: php captcha recaptcha

recaptcha似乎在我的本地计算机上验证,但是当我将其上传到我的实际网站时它总是失败。我转储了答案/响应对象,它看起来像这样:

ReCaptchaResponse::__set_state(array(
   'is_valid' => false,
   'error' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"',
))

里面有HTML!发生了什么,为什么会失败?

我也放弃了我的$_POST vars,它们看起来像这样:

array (
  *snip*
  'recaptcha_challenge_field' => '03AHJ_VuvqpAkJnmfOZHHf80EPt85lVEeq9IRuO9zw1jZ1fzUk-_DAw0z2k3-TeXzAXQVXUWChyCGnC1RoXRPly4Ldz0FugPKW_WKWEoKysNLnpcv2xvyWONpq0VDV3ipsy5Vukui0zxlSqiBBWw00VYPSkO52OqMv_A',
  'recaptcha_response_field' => 'uterf sw',
)

验证码:

$recaptcha_answer = recaptcha_check_answer('MY_PRIVATE_KEY_HERE', $_SERVER['REMOTE_ADDR'], $_POST['recaptcha_challenge_field'],  $_POST['recaptcha_response_field']);

if(!$recaptcha_answer->is_valid) {
    $validation_errors[] = 'The reCAPTCHA you entered was not correct';
    echo '<!-- '.var_export($recaptcha_answer,true).var_export($_POST,true).' -->';
}

显示代码:

<?= recaptcha_get_html('MY_PUBLIC_KEY_HERE') ?>

如果我将recaptcha文本框留空并提交表单,我会收到正确的错误消息:

  

不正确-验证码溶胶

但如果我填写它,它总是显示doctype ...我只是注意到那不是我正在使用的doctype;它试图告诉我我需要使用严格的doc类型而不是过渡性的吗?


如果它有任何区别,我正在使用“干净”的主题:

<script type="text/javascript">
    var RecaptchaOptions = {
        theme : 'clean'
    };
</script>

“红色”无法正确显示;文本框未对齐。


有些人进了图书馆。有一种名为_recaptcha_http_post的方法。它使用fsockopen向验证服务器发送请求。传出请求看起来像这样:

POST /recaptcha/api/verify HTTP/1.0
Host: www.google.com
Content-Type: application/x-www-form-urlencoded;
Content-Length: 272
User-Agent: reCAPTCHA/PHP

privatekey=<<MY INFO HERE>>&amp;challenge=<<BLAH>>...

但我回复的回复看起来并不是来自谷歌。这是一个“禁止访问!”页。我想知道是否有人在拦截它......

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。由于回复不是来自谷歌,我尝试查找IP:

echo 'www.google.com: '. gethostbyname('www.google.com').'<br/>';
echo '<offending site>: '. gethostbyname('<offending site>');

当我在我的服务器上运行它们时它们是一样的!有人搞砸了主机查找。啊!